日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2模型驱动和令牌拦截器

發布時間:2024/9/16 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模型驱动和令牌拦截器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。