我是靠谱客的博主 冷酷母鸡,最近开发中收集的这篇文章主要介绍使用Action的动态方法调用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

加入form表单需要注册和登录按钮,则Struts2需要提供包含多个处理逻辑的action

action="actionName!methodName" 表示调用名为actionName的methodName的方法。

代码如下:

1.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>dmi</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

2.配置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>
<!-- 增加全局国际化资源文件 -->
<constant name="struts.custom.i18n.resources" value="mess"/>
<constant name="struts.devMode" value="true"/>
<!-- 动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<package name="Demo" namespace="/" extends="struts-default">
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
<action name="login" class="dmi.loginRegiestAction">
<result name="success">/WEB-INF/content/welcome.jsp</result>
<result name="error">/WEB-INF/content/error.jsp</result>
</action>
</package>
</struts>

3.资源国际化

loginPage=u767bu5f55u9875u9762
errorPage=u9519u8befu9875u9762
succPage=u6210u529fu9875u9762
login=u767b u5f55
regies=u6ce8u518c
user=u7528u6237u540d
pass=u5bc6 u7801

4.loginForm表单

<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><s:text name="loginPage"/></title>
</head>
<body>
<form action="login">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="password" name="password"/><br/>
<input type="submit" value="注册" onclick="regiest()"/>
<input type="submit" value="登录" onclick="this.form.action='login';"/>
</form>
<script type="text/javascript">
function regiest(){
<!--获取第一个表单-->
targetForm = document.forms[0];
<!--动态修改表单的action属性-->
targetForm.action="login!regiest";
}
</script>
</body>
</html>

5.action处理类:

package dmi;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class loginRegiestAction extends ActionSupport{
private String username;
private String password;
private String tip;
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;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public String regiest()throws Exception{
ActionContext.getContext().getSession().put("username", getUsername());
ActionContext.getContext().getSession().put("password", getPassword());
setTip("恭喜您"+getUsername()+"已经注册成功了");
return SUCCESS;
}
[@Override](https://my.oschina.net/u/1162528)
public String execute() throws Exception {
String username = (String) ActionContext.getContext().getSession().get("username");
String password = (String)ActionContext.getContext().getSession().get("password");
if(getUsername().equals(username)&&getPassword().equals(password)){
setTip("欢迎"+getUsername()+",您已经登录成功了!");
return SUCCESS;
}
return ERROR;
}
}

6.登录成功和错误页面

welcome.jsp
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><s:text name="succPage"/></title>
</head>
<body>
<s:property value="tip"/>
</body>
</html>
error.jsp
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><s:text name="errorPage"/></title>
</head>
<body>
对不起,请您先注册!
</body>
</html>

在此之前还需要导入Struts2 所需的jar包; 在使用动态方法调用之前,需要设置Struts2允许动态方法调用。抬起系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation的value为true。 Struts2 的动态方法调用会存在一些安全的缺陷,应该尽量少使用动态方法调用。``` 这里输入代码

转载于:https://my.oschina.net/tyILOVE/blog/880174

最后

以上就是冷酷母鸡为你收集整理的使用Action的动态方法调用的全部内容,希望文章能够帮你解决使用Action的动态方法调用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部