如何在Struts 2中action类的prepare方法中获取URL参数[重复]

问题描述 投票:0回答:2

我在

null
接口的prepare方法中获取
Preparable
作为URL参数名称,而参数是在URL中设置的。

我正在尝试访问的网址,

http://localhost:8080/basic-struts/registerInput.action?userid=1


public class Register extends ActionSupport implements Preparable {    

    private String userid;       

    public void prepare() throws Exception {
        // Call the service, load data, 
        // every time even if validation fails

        System.out.println("----------");
        System.out.println(userid); //<-------null
        System.out.println("----------");
    }

    public String getUserId() {
        return userid;
    }

    public void setUserId(String userid) {
        this.userid = userid;
    }

}

注意:- 我在日志中收到一些错误,如下所示,

2021-07-01 09:28:53,929 错误 [qtp1182469998-22]拦截器.ParametersInterceptor (ParametersInterceptor.java:238) - 开发人员通知(将 struts.devMode 设置为 false 以禁用此消息): 在 'class org.apache.struts.register.action.Register 上设置 'userid' 时捕获意外异常:设置值为 ['1', ] 的表达式 'userid' 时出错

java parameters struts2 ognl
2个回答
1
投票

为操作类变量设置参数

userid
区分大小写。对应的setter方法应该是

public void setUserid(String userid) {
    this.userid = userid;
}

0
投票

@Dave Newton 的建议很有帮助,在他分享的链接上我得到了线索并让它发挥作用,

我更改了 struts.xml 并将拦截器

paramsPrepareParamsStack
添加到我的操作中,如下所示,

<action name="registerInput" class="org.apache.struts.register.action.Register" method="input" >
    <result name="input">/register.jsp</result>
    <interceptor-ref name="paramsPrepareParamsStack"/>
</action>
© www.soinside.com 2019 - 2024. All rights reserved.