struts2模型驱动和令牌拦截器
模型驅動:
*要從頁面中獲取表單元素的值,需要在動作類中聲明與頁面元素同名的屬性。導致動作類中既有javabean又有業務方法。
*將javabean和業務方法進行分離:
*將重新創建一個javabean,將javabean的內容放置其中。
*動作類action中只留業務方法
*在動作類中聲明的javabean無法從頁面中獲取同名的屬性
?
*需要使用struts2框架提供的"modelDriven(模型驅動)"
*實現ModelDriven這個接口
*重寫getModel()方法,返回該javabean的實例
*代碼如下:
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
@Override
public User getModel() {
// TODO Auto-generated method stub
?
return user;
}
public String add(){
System.out.println("UserAction******add()");
return "add";
}
?
public String save(){
System.out.println("UserAction******save()");
System.out.println("username="+user.getUsername());
System.out.println("tel="+user.getTel());
System.out.println("des="+user.getDes());
return "success";
}
}
*模型驅動的原理:
*在不適用模型驅動的時候,之所以在動作類中獲取不到對應的屬性的原因:
*在ValueStack中沒有對應javabean的所有屬性
*模型驅動的作用,就是講javabean的實例壓入對象棧的棧頂,從而可以獲取到對應的屬性的值
頁面回顯技術:
*通過模型驅動,在動作類action中,可以獲取到頁面中元素的值
?
//方法一
*通過javabean實例的set()方法,將新的內容set到javabean中,從而放置在頁面對應元素中
User newUser = new User();
newUser.setUsername("zhang");
newUser.setTel("123987654");
newUser.setDes("xxx");
//頁面回顯技術
//方法一
user.setUsername(newUser.getUsername());
user.setTel(newUser.getTel());
user.setDes(newUser.getDes());
?
//方法二
*首先將值棧中,舊的javabean的內容,刪除掉
*然后將新的內容壓入到值棧中的棧頂
User newUser = new User();
newUser.setUsername("zhang");
newUser.setTel("123987654");
newUser.setDes("xxx");
ValueStack valueStack = ServletActionContext.getContext().getValueStack();
valueStack.pop();
valueStack.push(newUser);
?
處理表單重復提交:
*在頁面中增加一個隱藏域:<s:token></token>
*在struts_model.xml里添加配置信息,具體配置如下:
<interceptors>
?
<interceptor-stack name="tokenStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token">
<!-- 配置令牌攔截器,攔截的方法名,如果配置多個方法時,用逗號隔開 -->
<param name="includeMethods">save,update</param>
</interceptor-ref>
?
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="tokenStack"></default-interceptor-ref>
*在struts_model.xml中增加一個result結果類型:
<!-- 配置表單重復提交后,要轉向到的頁面 -->
<result name="invalid.token">/model/error.jsp</result>
*在表單提交后,要轉向的頁面中,通過<s:actionerror>獲取struts2框架底層提供錯誤提示信息
?
*將struts2框架底層提供錯誤提示信息改成中文
*在與動作類action同級目錄下,創建名為token.properties 的資源文件,文件內容如下
struts.message.invalid.token=表單重復提交,請刷新后重試
?
總結
以上是生活随笔為你收集整理的struts2模型驱动和令牌拦截器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql explain中的type列
- 下一篇: PreparedStatement和St