当前位置: 首页 > news >正文

温州网站设计联系亿企邦wordpress 添加搜索栏

温州网站设计联系亿企邦,wordpress 添加搜索栏,最近军事动态,vmware云平台ModelDriven:模型驱动,对所有action的模型对象进行批处理. 我们在开发中#xff0c; 在action中一般是用实体对象#xff0c;然后给实体对象get#xff0c;set方法。 RegAction{   User user ;   //get/set} 然后在jsp页面中给action中的user属性绑定值是通过如下方式 在action中一般是用实体对象然后给实体对象getset方法。 RegAction{   User user ;   //get/set} 然后在jsp页面中给action中的user属性绑定值是通过如下方式 s:textfield nameuser.name /s:textfield nameuser.age /s:textfield nameuser.birthday / 这样都要加上user.因为在值栈中action进入值栈的时候值栈中存储的值就是以user.name这种形式存在的所以ognl搜索值栈的时候也要按这个名字来搜索。 这样就 比较麻烦于是就引入了模型驱动。 引入模型驱动后在jsp页面绑定属性值的时候就可以不用加上user.  如 s:textfield namename /s:textfield nameage /s:textfield namebirthday / 原理是什么ognl在搜索name值的时候会把模型驱动user压入栈顶。ognl在值栈扫描的时候会从上往下找这样就会搜到user中的name等等  是模型拦截器把模型压入栈顶的。   htmlheadtitlereg.jsp/title/headbodys:actionerror/s:form namespace/md actionMdAction_reg methodpost themexhtml validatetrues:textfield namename labelUserName /s:textfield nameage labelUserAge /s:submit //s:form/body /html   user类 public class User {private Integer id ;private String name ;private Integer age ;public String getName() {return name;}public void setName(String name) {this.name name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;}public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String toString() {return User(id,name , age );} }   /*** MdAction:某型驱动*/ public class MdAction extends ActionSupport implements ModelDrivenUser,Preparable {private String name; 由于使用了模型驱动user处于栈顶user中也有name那么jsp页面绑定的name是user中name并不是这里的name所以该name值为null,同理在修改功能传id的时候如果user中有id属性而在action中也定义了一个id来接收该参数这样id也接收不到值因为使用了模型驱动后模型驱动拦截器会把id的值传给user中的id而不是action中的id属性为了解决这个问题需要把action中接收参数id的属性定义为别的名称。比如uid同时修改jsp中的传参为uid这样就解决了这个问题。这是在使用模型驱动的时候需要注意的地方。 private User user new User();属性user模型驱动栈顶的对象 public String reg() {return success;}SkipValidationpublic String toRegView() {System.out.println(toRegView);return regView;} public User getModel() {return user;}public String getName() {return name;}public void setName(String name) {this.name name;}        public User getModel() {          return user;//这里返回的就是action中的属性user如果在action中的其他方法里使用了User usernew User()那么这个user对象就不是模型驱动的的对象 也就是不处在栈顶。即使把当前new出的user赋值给属性user也不行因为在值栈中是通过引用来实现即值栈中是对象的地址。      }       public String Edit()     {     User u new User();     u.setId(uid);     u.setName(jerry);     u.setAge(30);     user u ;注意这里的user并不是栈顶的user引用已经指向了新对象u     如果要把u对象放到栈顶可以手动的push     ServletActionContext.getContext().getValueStack().push(u) ;//把u对象放到栈顶那么执行修改时回显的就是该对象的数据。    } }   上面的方法是手动把u对象压入栈顶还有一种方法可以解决这个问题。  模型驱动拦截器的高级应用 struts在调用模型驱动拦截器的之前会调用prepare拦截器prepare拦截器中会调用一个prepare方法该方法在模型驱动拦截器之前调用也就是在模型驱动 拦截器中的getModel方法之前执行getModel方法返回的就是栈顶的对象那么可以在prepare中把getModel方法中要返回到栈顶的对象给换掉也就是重新引用。 这样就不用手动的push到栈顶了。   /*** MdAction:某型驱动*/ public class MdAction extends ActionSupport implements ModelDrivenUser,Preparable {private static final long serialVersionUID -6933309304624396640L;private String name;private Integer uid ;private User user new User();//模型驱动的getModel方法返回到栈顶的对象。userprivate ListUser userList ;public String reg() {return success;}SkipValidationpublic String toRegView() {System.out.println(toRegView);return regView;}/*** 查询所有用户*/public String findAllUsers(){userList new ArrayListUser();User u null ;for(int i 0 ; i 10 ; i ){u new User();u.setId(1 i);u.setName(tom i);u.setAge(20 i);userList.add(u);}return userListView;}public String edit(){return editView ;}//public User getModel() {return user;}public String getName() {return name;}public void setName(String name) {this.name name;}public ListUser getUserList() {return userList;}public void setUserList(ListUser userList) {this.userList userList;}public Integer getUid() {return uid;}public void setUid(Integer uid) {this.uid uid;}/*** 该方法在getModel之前运行,在modelDriven拦截器之前先运行*/public void prepareEdit() throws Exception { 该命名规则说明在执行Edit的时候才会执行该方法。//User u new User();u.setId(uid);u.setName(jerry);u.setAge(30); user u ;把user对象换掉换成新new出的对象。}public void prepare() throws Exception {} }   但是由于使用的是默认拦截器栈prepare拦截器在params拦截器之前执行这样在编辑的时候就无法获取到id值因为此时还没有经过参数params烂机器的处理。 所以这种方法不能使用默认的拦截器栈struts-default.xml提供了一个拦截器栈paramsPrepareParamsStack所以要引入该拦截器栈。 strutspackage nameMdPkg namespace/md extendsstruts-defaultaction nameMdAction_* classstruts2.modeldriven.MdAction method{1}result namesuccess/md/reg.jsp/resultresult nameregView/md/reg.jsp/resultresult nameeditView/md/edit.jsp/resultresult nameuserListView/md/userList.jsp/resultinterceptor-ref nameparamsPrepareParamsStack / 不能引入默认拦截器栈要在prepare拦截器之前执行params拦截器/action/package /struts     模型驱动的应用 假设在开发中有很多实体对象比如用户类User订单类Order部门类Department等等 对应的有很多Action如UserActionOrderActionDepartmentAction等等。 UserAction{   User user; } OrderAction{   Order order; } 如果在开发中需要开发一个处理模型的拦截器 ProcessModelInterceptor{   if(action instanceof(UserAction){     Object ogetUser();//得到该实体类的对象   }       else if(action instanceof(OrderAction){     Order ogetOrder();//得到该实体类的对象   }       ....     这样如果有很多的类几十甚至上百个实体类都要这么去判断将是十分的麻烦。引入了模型驱动后就解决了这个问题。 }   引入模型驱动后的做法模型驱动的好处是对所以的action模型对象进行批处理 ProcessModelInterceptor{   if(action instanceof(ModelDriven){//判断action是否实现了模型驱动接口     Object o((ModelDriven)action).getModel();//得到action的模型对象     然后用反射获取action中的信息   } }  转载于:https://www.cnblogs.com/lxboy2009/p/6105605.html
http://www.pierceye.com/news/377821/

相关文章:

  • 怎样建立网站平台新网站应该怎么做
  • 根据颜色找网站济南做网站公司排名
  • 面对面视频 网站开发网络科技加我qq是干嘛
  • 如何登录网站制作平台百度旧版本
  • 广东营销型网站建设报价定制商品的app
  • 网站导航常用关键字电子商务网站设计内容
  • 建设vip网站相关视频wordpress 修改用户头像
  • 考百度指数 某个关键词在某个行业网站上的wordpress与Wix对比
  • 机器人网站建设规划书福州网站制作怎样
  • 自己创建一个网站需要多少钱2023最建议买10款手机
  • 寻找富阳网站建设国内个人网站欣赏
  • 企业自建站城市建设模拟游戏官方网站
  • 网站建设数据库类型建立网站信息发布登记制度
  • it培训机构都有哪些seo推广教程seo推广技巧
  • 龙岩网站开发较好的公司wordpress屏蔽首页
  • 有没有做美食的网站深圳网站建站公司
  • 学校网站建设需求分析调研表网站右侧信息跟随左侧菜单栏变化
  • 家乡网站建设策划案邢台哪里建网站
  • 网站建设实习收获青岛网上房地产网站
  • 简述电子政务网站设计的技术企业邮箱是什么类型的账户
  • 深圳网站建设公司元嘉定网站开发
  • 佛山外贸网站建设平台上传网站安装教程
  • c2c网站建设实例德国网站建设
  • 建网站支持设备是什么意思佛山中小企业网站建设
  • 网站建设与管理读后感宁德住房和城乡建设部网站
  • 贸易网站建站建设部网站社保联网
  • 住房城乡建设厅网站准考证如何建小企业网站
  • 葫芦岛市城乡建设局网站做什么样的网站
  • 铜山区规划建设局网站大学生心理咨询网站建设论文
  • 泸州本地网站建设扬州做网站公司