为什么Struts2 action 中取不到页面传递的值?

S2SH 整合中action 的值都是 Null

 

public class MembersAction extends ActionSupport {

    public String goToReg(){
        return SUCCESS;
    }
    
    public String regist(){
        System.out.println(names);
        System.out.println(membersInfo);
        System.out.println(getMembersInfo().getNickName());
        return SUCCESS;
    }
    
    private String names;
    
    private MembersInfo membersInfo;

    public MembersInfo getMembersInfo() {
        return membersInfo;
    }

    public void setMembersInfo(MembersInfo membersInfo) {
        this.membersInfo = membersInfo;
    }

    public String getNames() {
        return names;
    }

    public void setNames(String names) {
        this.names = names;
    }
}

 

 

<struts>
    <constant name="struts.locale" value="en_GB" />
    <constant name="struts.objectFactory" value="spring"/>
    
    <package name="members" extends="struts-default">
        <action name="goToReg" class="membersAction" method="goToReg">
            <result name="success">/HTM/MyJsp.jsp</result>
        </action>
    
        <action name="regMember" class="membersAction" method="regist">
            <result name="success">/HTM/success.htm</result>
            <result name="error">/HTM/error.htm</result>
            <result name="wait">/HTM/wait.htm</result>
            <interceptor-ref name="execAndWait"/>
            <interceptor-ref name="tokenSession"/>
        </action>
    </package>
</struts>
<bean id="membersAction" class="eve.members.action.MembersAction" scope="prototype"></bean>

 

<form action="regMember!regist.action" method="post">
        <s:token/>
        <input type="text" name="names"><br>
                <input type="text" name="membersInfo.nickName"><br>
        <input type="submit"><br>
</form>

 

同 luckaway

在struts.xml用自己的拦截器时,默认的拦截器就不起作用了。你必须自己添加默认的拦截器。
struts2的取值封装是基于 默认拦截器来实现的。




JSP的form action请求应该与struts里的action标签的name属性一致,像你的应用应该为regMember.action或者goToReg.action

你应该用Struts2的标签,而不是HTMl的标签

这两个配置删除掉吧,只要你自己加上拦截器,struts默认的拦截器链就不会执行了!

默认的拦截器链包含有一个设置参数的拦截器,或者你把那个拦截器的也显示的加到配置上!