属性驱动,模型驱动及动态方法调用
来源:互联网 发布:精通javascript 豆瓣 编辑:程序博客网 时间:2024/06/05 07:37
1,属性驱动:
使用属性作为贯穿整个MVC流程,属性无法独立存在,必须依附Action实例这个对象。属性类型为基本数据类型(int ,string等);属性的类型为用户自定义的javaBean类型。新建一个工程attributeDriven如下:
先建一个User类:
package nuc.sw.vo;public class User {private String username;private String password;public String getUsername() { return username;}public void setUsername(String username) { this.username = username;}public String getPassword() { return password;}public void setPassword(String password) { this.password = password;}}
Action中:
package nuc.sw.action;import nuc.sw.vo.User;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class LoginAction extends ActionSupport{ private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } /** * 判断用户名和密码是否正确 * @return * @throws Exception */ public String loginexecute() throws Exception{ if(user.getUsername().equals("yangna") &&user.getPassword().equals("123")){ ActionContext.getContext(). getSession().put("user",user.getUsername()); return SUCCESS; }else{ ActionContext.getContext(). put("error", "用户名或密码错误!"); return ERROR; } } /** * 进行用户名和密码是否为空的校验 */ public void validate(){ user.getUsername().trim().equals("")){ this.addFieldError("usernameError", "<font color='red'>用户名不能为空</font>"); if(user.getPassword()==null|| user.getPassword().trim().equals("")){ this.addFieldError("passwordError", "<font color='red'>密码不能为空</font>"); } }}
需要注意在jsp页面时:
用户名:<input type="text" name="user.username"><br>密码:<input type="password" name="user.password"><br>
否则会发生空指针异常。
trim()方法:去掉字符串首尾的空格,validate()方法最先执行。
2,模型驱动:
模型对象不仅可以封装用户参数请求,还可以封装Action的处理结果。出于结构清晰的考虑,采用单独的Model实例来封装请求参数和处理结果。模型驱动就是使用单独的JavaBean实例来贯穿整个MVC流程。Action必须实现ModelDriven接口,实现该接口必须实现getModel()方法,该方法用于把Action和与之对应的Model实例关联起来。
Action:
package nuc.sw.action;import nuc.sw.vo.User;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class LoginAction extends ActionSupport implements ModelDriven<User>{ private User user=new User(); public User getUser() { return user; } public void setUser(User user) { this.user = user; } /** * 判断用户名和密码是否正确 * @return * @throws Exception */ public String loginexecute() throws Exception{ if(user.getUsername().equals("yangna")&&user.getPassword().equals("123")){ //放入session ActionContext.getContext().getSession().put("user",user.getUsername()); return SUCCESS; }else{ ActionContext.getContext().put("error", "用户名或密码错误!"); return ERROR; } } /** * 进行用户名和密码是否为空的校验 */ public void validate(){ if(user.getUsername()==null||user.getUsername().trim().equals("")){ this.addFieldError("usernameError", "<font color='red'>用户名不能为空</font>"); } if(user.getPassword()==null||user.getPassword().trim().equals("")){ this.addFieldError("passwordError", "<font color='red'>密码不能为空</font>"); } } @Override public User getModel() { // TODO Auto-generated method stub return user; }}
3,模型驱动与属性驱动的区别:
模型驱动必须实现ModelDriven接口;模型必须实例化;必须实验getModel()方法;模型驱动无属性的setter()和getter()方法;在jsp页面中获取参数也不同。
4,动态方法调用:
在这里引用注册和登录来实现:
在Action中增加注册方法registe():
public String registexecute() throws Exception{ ActionContext.getContext().getSession().put("regUsername", user.getUsername()); ActionContext.getContext().getSession().put("regPassword", user.getPassword()); return "registOk"; }
在struts.xml中增加action:
<action name="registe" class="nuc.sw.action.LoginAction" method="registexecute"> <result name="registOk">/register.jsp</result> <result name="input">/login.jsp</result> </action>
在login.jsp文件中进行登录和注册:
<script type="text/javascript">function login(){ //获取JSP页面的一个表单元素 targetForm=document.forms[0]; //动态修改目标表单的action属性 targetForm.action="login!loginexecute"; //提交表单 targetForm.submit();}function registe(){ targetForm=document.forms[0]; targetForm.action="registe!registexecute"; targetForm.submit();}</script></head><body><center><font color="red">${requestScope.error}</font><form action="actionName!methodName" method="post"> <s:fielderror escape="false"></s:fielderror> 用户名:<input type="text" name="username"><br><br> 密码:<input type="password" name="password"><br><br> <input type="button" value="登录" onclick="login()"> <input type="button" value="注册" onclick="registe()"> </form>
0 0
- 属性驱动,模型驱动及动态方法调用
- 模型驱动和属性驱动
- 属性驱动和模型驱动
- struts2属性驱动,模型驱动
- 63 linux内核的SPI设备驱动模型及应用程序调用SPI控制器的方法
- 读书笔记模型驱动与属性驱动
- 读书笔记模型驱动与属性驱动
- Struts2的属性驱动与模型驱动
- struts2 属性驱动 和模型驱动
- struts属性驱动与模型驱动
- Struts2 - 属性驱动与模型驱动
- Struts2属性驱动与模型驱动
- 读书笔记模型驱动与属性驱动
- Struts2的属性驱动和模型驱动
- 属性驱动与模型驱动的比较
- Struts2中属性驱动与模型驱动
- Struts2 - 属性驱动与模型驱动
- Struts2的属性驱动和模型驱动
- 2.支持向量机概念详解
- 弹出提示框,确认、取消按钮分别转跳到不同的网页
- Linux的五个查找命令:find,locate,whereis,which,type
- 相比于深度学习,传统的机器学习算法难道就此没落了吗,还有必要去学习吗?
- Hibernate联合主键映射
- 属性驱动,模型驱动及动态方法调用
- 几句代码快速集成自定义转场效果+ 全手势驱动
- Python之美[从菜鸟到高手]--装饰器之使用情景分析
- HTML学习笔记-form表单(五)
- Ubuntu14.04下配置PHP7.0+Apache2+Mysql5.7
- leetcode 227. Basic Calculator II
- 用递归的方法求1+!2+!3+.....+!20=的和
- [知识点滴]解决js跨域的几种方法
- 算法导论2.3MERGE-SORT(分治或者合并排序算法)