Struts2 動態方法呼叫(十三)
附件中有完整的案例!
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>
相關文章
- Ruby如何實現動態方法呼叫
- Struts2中Action動態呼叫DMI出現的一個問題
- VS中呼叫DLL動態庫的方法
- Python中動態類和動態方法的建立與呼叫Python
- 使用反射-動態建立物件及呼叫物件方法反射物件
- VB動態呼叫外部函式的方法 (轉)函式
- 簡單理解Struts2 action中動態方法及萬用字元字元
- Struts2 OGNL動態配置result(十八)
- 構造器中呼叫動態繫結的方法
- java動態呼叫webserviceJavaWeb
- VC動態呼叫DLL
- Laravel 如何實現既能靜態呼叫,又能動態呼叫Laravel
- 物件呼叫動態變數物件變數
- C#動態呼叫webserviceC#Web
- oracle呼叫C動態庫Oracle
- VB呼叫C程式的方法—動態連結庫法 (轉)C程式
- java呼叫c++動態庫之jni呼叫JavaC++
- 行業動態資訊整合 - 第十三期行業
- 動態庫的建立和呼叫
- java動態呼叫c++庫JavaC++
- C#動態呼叫WCF介面C#
- linuxjna呼叫so動態庫Linux
- EXECUTE IMMEDIATE 呼叫動態過程
- C語言動態呼叫庫(轉)C語言
- perl根據函式名動態呼叫函式
- 動態呼叫儲存過程 sample:儲存過程
- 在PowerBuilder中動態呼叫函式UI函式
- PHP 中 static 靜態屬性和靜態方法的呼叫PHP
- 那種動態呼叫技術效率最高?
- 動態呼叫python類和函式Python函式
- Oracle 迴圈呼叫動態SQL語句OracleSQL
- MFC之動態呼叫自己寫的類庫中的類的成員方法
- 動態框架方法論框架
- C#呼叫C++動態連結庫C#C++
- C++呼叫C#的動態庫dllC++C#
- mybatis動態呼叫表名和欄位名MyBatis
- 作業系統動態庫呼叫過程作業系統
- (C#)利用反射動態呼叫類成員C#反射