Struts2 动态方法调用(十三)

本文详细介绍了动态方法调用在业务逻辑处理中的应用,包括Struts框架中如何通过不同的参数调用不同的Action方法。通过案例展示了登录/注册功能的实现,包括使用'!'符号、通配符和'method属性'三种方式。同时,提供了相关代码示例,便于开发者理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b][color=red]附件中有完整的案例![/color][/b]
[color=red]1.动态方法调用[/color]

在业务逻辑处理action中,可以包含一个或者多个逻辑处理方法。
例如:在jsp文件中的同一个form表单中 有多个用来提交的表单值的按钮,可当用户通过不通的按钮提交表单的时候,需要笤俑Action中的不同的处理方法,这是就需要使用动态方法调用。
在使用动态方法调用时候,提交请求的action属性值,有以下几种方法
action=“Action名称!方法名”
或者
action=“Action名称!方法名.action”
或者
采用通配符 {}来进行动态方法调用
或者
method 配置多个同一个action 不同的 method


[b][color=red]2.案例:登录/注册(采用 “!” “通配符”“ method属性” 三种方法实现 )[/color][/b]
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;
}
}


[b][color=red]login.jsp[/color][/b]

<%@ 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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值