【问题标题】:Not able to get Request-scoped attribute in Action through XMLHttpRequest无法通过 XMLHttpRequest 在 Action 中获取请求范围的属性
【发布时间】:2015-05-03 20:28:18
【问题描述】:

我在jsp页面中设置receiverid。我正在使用 ajax 发送 textarea 值 并且以同样的方法,我得到了正常工作的客户端 IP。 我还想获取在 jsp 页面中设置的接收器 ID。 但这显示的是NullPointerException。

在jsp中

<s:set var="receiverid" value="1" scope="request"/>
<form action="" id="post_message_form">
 <s:textarea name="message"></s:textarea>
 <button type="submit" id="submit_status_button">Submit</button>
</form>


 $(document).on('submit', '#post_message_form', function(f) {
        f.preventDefault();
        var formData = $("#post_message_form").serialize();
        console.log(formData);
        $.ajax({
            type: 'POST',
            url: 'PostIt',
            data: formData,
            dataType: "text html",
            success: function(data) {

            }
        })
    });

在行动

public class UserMessageInsert extends ActionSupport implements ModelDriven<PostMessages> {
    PostMessages pm = new PostMessages();
    private long aid;
    public String insert() {
             HttpServletRequest request = ServletActionContext.getRequest();
            String ipAdd = request.getHeader("X-FORWARDED-FOR");
            if (ipAdd == null) {
                ipAdd = request.getRemoteAddr();
                long l=(Long) request.getAttribute("receiverid");//NulllPointer Exception
                System.out.println("Ip is "+ipAdd+" l is "+getAid());
            }
}

【问题讨论】:

    标签: jquery ajax struts2 http-headers xmlhttprequest


    【解决方案1】:

    我猜问题在于 AJAX 调用忽略了您的请求范围属性,因为它创建了一个全新的 XMLHttpRequest 而不是经典的 HttpRequest。

    只需将您的属性添加为表单中的隐藏参数,除非您有理由不这样做:

    <s:set var="receiverid" value="1" scope="request"/>
    <form action="" id="post_message_form">
    
        <s:hidden value="%{#request.receiverid}" name="receiverid" />
    
        <s:textarea name="message"></s:textarea>
        <button type="submit" id="submit_status_button">Submit</button>
    </form>
    

    然后它将被序列化并提交,您将使用 setter 或 getParameter() 访问它,而不是 getAttribute()。

    【讨论】:

    • 是的,我也在做同样的事情。但我无法从请求范围中获取接收者 ID 值。
    • 我猜是因为你使用的是 AJAX
    • 但是 Ip daddess 从请求范围正确打印
    • 那是标题,不是属性。
    • 你有没有进一步调查,你还有疑问...?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2011-09-02
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多