Struts2 动态方法调用(十三)
程序员文章站
2022-04-23 10:46:20
...
附件中有完整的案例!
1.动态方法调用
2.案例:登录/注册(采用 “!” “通配符”“ method属性” 三种方法实现 )
struts.xml
Action.java
login.jsp
initPerson.jsp
1.动态方法调用
在业务逻辑处理action中,可以包含一个或者多个逻辑处理方法。 例如:在jsp文件中的同一个form表单中 有多个用来提交的表单值的按钮,可当用户通过不通的按钮提交表单的时候,需要笤俑Action中的不同的处理方法,这是就需要使用动态方法调用。 在使用动态方法调用时候,提交请求的action属性值,有以下几种方法 action=“Action名称!方法名” 或者 action=“Action名称!方法名.action” 或者 采用通配符 {}来进行动态方法调用 或者 method 配置多个同一个action 不同的 method
2.案例:登录/注册(采用 “!” “通配符”“ method属性” 三种方法实现 )
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!--==================== --> <!--=====定义常量========= --> <!--==================== --> <!-- 修改请求的后缀名为.do 修改后每个请求必须要有后缀了--> <constant name="struts.action.extension" value="do,action"/> <!-- 对于 采用 "!方法名"这种方法有用 ,采用通配符就不需要设置这个了 --> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <!-- 默认的视图主题 <constant name="struts.ui.theme" value="simple"/>--> <!--+===================+--> <!--+=====定义基本包=======+--> <!--+===================+--> <package name="default" extends="struts-default"> <action name="showPerson" class="com.luob.action.ShowPerson"> <result name="success">/showPerson.jsp</result> </action> </package> <!-- 使用“!”进行动态方法的调用 --> <package name="user" extends="struts-default" namespace="/user"> <action name="loginRegister" class="com.luob.action.ShowPerson"> <result name="success">/index.jsp</result> <result name="reg">/initPerson.jsp</result> </action> </package> <!--使用通配符 来进行动态方法的调用 --> <package name="user2" extends="struts-default" namespace="/user2"> <action name="userAction_*_*" class="com.luob.action.ShowPerson" method="{1}"> <result name="success">/index.jsp</result> <result name="reg">/initPerson.jsp</result> </action> </package> <!-- 使用Method来动态指定调用某个Action中的方法 --> <package name="user3" extends="struts-default" namespace="/user3"> <action name="login" class="com.luob.action.ShowPerson"> <result name="success">/index.jsp</result> </action> <action name="register" class="com.luob.action.ShowPerson" method="register"> <result name="reg">/initPerson.jsp</result> </action> </package> </struts>
Action.java
package com.luob.action; import com.luob.model.Person; import com.opensymphony.xwork2.ActionSupport; public class ShowPerson extends ActionSupport { private Person person; //采用POJO的方式进行赋值和存值 private String tip; @Override public String execute() throws Exception { // TODO Auto-generated method stub setTip("您单击了【登录】按钮!您使用帐号"+person.getName()+"登录成功!"); return SUCCESS; } public String register(){ setTip("您单击了【注册】按钮!亲填写下面的信息吧!"); return "reg"; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } public String getTip() { return tip; } public void setTip(String tip) { this.tip = tip; } }
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <SCRIPT type="text/javascript"> function reg(){ var targetForm=document.forms[0]; targetForm.action="user/loginRegister!register.action"; targetForm.submit(); } function reg2(){ var targetForm=document.forms[1]; targetForm.action="user2/userAction_register.action"; targetForm.submit(); } function reg3(){ var targetForm=document.forms[2]; targetForm.action="user3/register.action"; targetForm.submit(); } </SCRIPT> </head> <body> <center> <!-- 使用 “!”来动态调用方法 --> <s:form action="user/loginRegister!execute.action" method="post" theme="simple"> <ul style="list-style: none;"> <li>帐号:<s:textfield name="person.name"/></li> <li>密码:<s:textfield name="person.password"/></li> <li> <input type="button" value="注册" onclick="reg()"/> <s:submit value="登录"/> </li> </ul> </s:form> <!-- 采用通配符 进行方法动态调用 --> <s:form action="user2/userAction_.action" method="post" theme="simple"> <ul style="list-style: none;"> <li>帐号:<s:textfield name="person.name"/></li> <li>密码:<s:textfield name="person.password"/></li> <li> <input type="button" value="注册" onclick="reg2()"/> <s:submit value="登录"/> </li> </ul> </s:form> <!-- 采用method属性动态调用方法--> <s:form action="user3/login.action" method="post" theme="simple"> <ul style="list-style: none;"> <li>帐号:<s:textfield name="person.name"/></li> <li>密码:<s:textfield name="person.password"/></li> <li> <input type="button" value="注册" onclick="reg3()"/> <s:submit value="登录"/> </li> </ul> </s:form> </center> </body> </html>
initPerson.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'initPerson.jsp' starting page</title> </head> <body> <center> <s:form action="showPerson" method="post"> <s:textfield name="person.name" label="姓名"/> <s:textfield name="person.sex" label="性别"/> <s:textfield name="person.age" label="年龄"/> <s:textfield name="person.address" label="住址"/> <s:submit value="提交"/> </s:form> </center> </body> </html>