Struts2.0深入进修 定名空间,模子驱动,表单反复提交
当前位置:以往代写 > JAVA 教程 >Struts2.0深入进修 定名空间,模子驱动,表单反复提交
2019-06-14

Struts2.0深入进修 定名空间,模子驱动,表单反复提交

Struts2.0深入进修 定名空间,模子驱动,表单反复提交

副标题#e#

Struts2深入摸索:

1,package中的abstract="true"暗示该package内里不能包函action元素

2,package中若指定namespace="/mynamespace"则:

<!--
包的namespace要以"/"开头,对应的页面的路径前面也加上/mymengya/ActionName.action
如:<s:form action="/mymengya/register.action" method="post" theme="simple">
-->
<package name="mengya" extends="struts-default" namespace="/mymengya">

<action name="register"
class="com.mengya.action.RegisterAction">
<result name="success">/show.jsp</result>
<result name="input">/index.jsp</result>
<result name="invalid.token">/index.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>

</action>

</package>

在页面form的action中也要加上/mynamespase而且还要加上后缀action(不管是不是用的struts标签)

 

3,模子驱动

/**
* 模子Bean
* @author 张明学
*
*/
public class RegisterBean {
private String username;

private String password;

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

}
Action则要接实com.opensymphony.xwork2.ModelDriven接口:
public class RegisterAction extends ActionSupport implements ModelDriven {

/**
* 模子驱动,该模子Bean必需实例化
*/
private RegisterBean loginBean = new RegisterBean();

public Object getModel() {
return loginBean;
}

@Override
public String execute() throws Exception {

return SUCCESS;
}

}


#p#副标题#e#

对应页面则可以直接用模子Bean的属性

如:

<tr>
<td>
用户名:
<s:textfield name="username"></s:textfield>
<%-- 将form的theme="simple"就可以自由机关了,对付fielderror加上name属性就可以显示这个属生的错误信息 --%>
<s:fielderror name="username"></s:fielderror>
</td>
</tr>
<tr>
<td>
暗码:
<s:password name="password"></s:password>
<s:fielderror name="password"></s:fielderror>
</td>
</tr>

<s:property value="username"/>
<s:property value="password"/>

5,表单反复提交:

一,在form内里加上<s:token id="register"></s:token>标签

二,在Action里加上<interceptor-ref name="token"></interceptor-ref>拦截器

默认拦截器:<interceptor-ref name="defaultStack"></interceptor-ref>

三:道理:

当页面第一次生成的时候<s:token id="register"></s:token>会生成一个埋没表单域个中包容一个值,该值 也同样被存放到session傍边去了

当页面第一次提交的时候token拦截器会较量这两个值是否沟通,沟通则第一次提交,第一次提交后会把session这个值清空,表单若再一次提交时则

session傍边没有值即两个值不沟通提交失败,返回的resut的name为:invalid.token 即:

<result name="invalid.token">/index.jsp</result>
<s:form action="/mymengya/register.action" method="post" theme="simple">
<s:token id="register"></s:token>
<table width="50%">
<tr>
<td>
用户名:
<s:textfield name="username"></s:textfield>
<s:fielderror name="username"></s:fielderror>
</td>
</tr>
<tr>
<td>
暗码:
<s:password name="password"></s:password>
<s:fielderror name="password"></s:fielderror>
</td>
</tr>
<tr>
<td>
<s:submit value="注册"></s:submit>
</td>

</tr>
</table>
</s:form>

<package name="mengya" extends="struts-default" namespace="/mymengya">

<action name="register"
class="com.mengya.action.RegisterAction">
<result name="success">/show.jsp</result>
<result name="input">/index.jsp</result>
<result name="invalid.token">/index.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>

</action>

</package>

修改Struts2默认的反复提交的错误提示信息:
在Struts2国际化属性文件中添加一条信息:
struts.messages.invalid.token = \u8868\u5355\u4e0d\u5141\u8bb8\u91cd\u590d\u63d0\u4ea4
struts.messages.invalid.token = 不能反复提交

    关键字:

在线提交作业