Struts2 Action动态方法调用问题

qq_38347310 2017-04-27 12:19:01
刚接触Struts2,做个简单的程序,希望点击登入时使用execute方法,点击注册按钮时调用regist方法,然而使用login!regist注册按钮无法调用regist方法。希望有人能指点一下。
login.jsp代码
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%@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>
<s:form action="login" method="POST" >
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit value="登入"/>
<input type="submit" value="注册" onclick="regist();"/>
</s:form >
<script type="javascript">
function regist(){
targetForm=document.forms[0];
targetForm.action="login!regist";
}
</script>

</body>
</html>

Action代码
package lee;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* Created by Administrator on 2017/4/25 0025.
*/
public class LoginAction extends ActionSupport{
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;
}
public String regist() throws Exception{
ActionContext actionContext=ActionContext.getContext();
actionContext.getSession().put("username",getUsername());
actionContext.put("tip","恭喜你"+getUsername()+"。注册成功!");
return SUCCESS;
}
@Override
public String execute() throws Exception {
if (getUsername().equals("xiao")
&getPassword().equals("123456")){
ActionContext.getContext().getSession().put("user",getUsername());
return SUCCESS;
}
else {
return ERROR;
}
}

}

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.i18n.encoding" value="UTF-8"/>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="lee" extends="struts-default" namespace="/">
<action name="login" class="lee.LoginAction" >
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
<action name="login2" class="lee.LoginAction2" >
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
...全文
1200 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2017-04-28
  • 打赏
  • 举报
回复
真心劝一下楼主,如果做项目还是改用spring mvc 吧 我们项目组已经被 struts2 的漏洞整得半死不活了,三天两头暴漏洞,三天两头打补丁,一不小心服务器就被黑客关照
李德胜1995 2017-04-27
  • 打赏
  • 举报
回复
引用 9 楼 qq_38347310的回复:
[quote=引用 8 楼 pany1209 的回复:] [quote=引用 6 楼 qq_38347310 的回复:] [quote=引用 1 楼 pany1209 的回复:] 配置写错了。。。。应该是<action name="login!*" class=全限定名 method="{1}">,就能使用login!方法名。。。屌用里面的方法了
按照你说的改了之后,s:form action那里一直出现错误,无论是改成login还是login!*都没用[/quote] s:form action写什么???[/quote] s:form action:"login"出错,按照编译器提示改成s:form action:"login!*"也出错[/quote] 你要提交到regist方法,当然是写login!regist
qq_38347310 2017-04-27
  • 打赏
  • 举报
回复
引用 8 楼 pany1209 的回复:
[quote=引用 6 楼 qq_38347310 的回复:] [quote=引用 1 楼 pany1209 的回复:] 配置写错了。。。。应该是<action name="login!*" class=全限定名 method="{1}">,就能使用login!方法名。。。屌用里面的方法了
按照你说的改了之后,s:form action那里一直出现错误,无论是改成login还是login!*都没用[/quote] s:form action写什么???[/quote] s:form action:"login"出错,按照编译器提示改成s:form action:"login!*"也出错
李德胜1995 2017-04-27
  • 打赏
  • 举报
回复
引用 6 楼 qq_38347310 的回复:
[quote=引用 1 楼 pany1209 的回复:] 配置写错了。。。。应该是<action name="login!*" class=全限定名 method="{1}">,就能使用login!方法名。。。屌用里面的方法了
按照你说的改了之后,s:form action那里一直出现错误,无论是改成login还是login!*都没用[/quote] s:form action写什么???
qq_38347310 2017-04-27
  • 打赏
  • 举报
回复
引用 4 楼 qq_38039130 的回复:
你提交过去也会出错。你没有指向调用什么方法,action权限定名加上,name改成login_*,method={1} 前台也这样/login,调用默认方法,如果其他的/login_方法名,
我希望是通过注册按钮调用action里的regist方法,按照你说的改了之后,regist()已经是灰色的,显示没有使用。
李德胜1995 2017-04-27
  • 打赏
  • 举报
回复
配置写错了。。。。应该是<action name="login!*" class=全限定名 method="{1}">,就能使用login!方法名。。。屌用里面的方法了
qq_38347310 2017-04-27
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:
配置写错了。。。。应该是<action name="login!*" class=全限定名 method="{1}">,就能使用login!方法名。。。屌用里面的方法了
按照你说的改了之后,s:form action那里一直出现错误,无论是改成login还是login!*都没用
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:
配置写错了。。。。应该是<action name="login!*" class=全限定名 method="{1}">,就能使用login!方法名。。。屌用里面的方法了
输入法暴露了什么
MonkeyHou0529 2017-04-27
  • 打赏
  • 举报
回复
你提交过去也会出错。你没有指向调用什么方法,action权限定名加上,name改成login_*,method={1} 前台也这样/login,调用默认方法,如果其他的/login_方法名,
MonkeyHou0529 2017-04-27
  • 打赏
  • 举报
回复
把submit改成button,前一个自动提交,后一个手动提交可以调用方法
MonkeyHou0529 2017-04-27
  • 打赏
  • 举报
回复
debug打开。看什么效果,里面可以看到js出错还是什么!如果js没错。你把submit改一下试试。
qq_38347310 2017-04-27
  • 打赏
  • 举报
回复
引用 10 楼 pany1209 的回复:
[quote=引用 9 楼 qq_38347310的回复:][quote=引用 8 楼 pany1209 的回复:] [quote=引用 6 楼 qq_38347310 的回复:] [quote=引用 1 楼 pany1209 的回复:] 配置写错了。。。。应该是<action name="login!*" class=全限定名 method="{1}">,就能使用login!方法名。。。屌用里面的方法了
按照你说的改了之后,s:form action那里一直出现错误,无论是改成login还是login!*都没用[/quote] s:form action写什么???[/quote] s:form action:"login"出错,按照编译器提示改成s:form action:"login!*"也出错[/quote] 你要提交到regist方法,当然是写login!regist[/quote] 我重新尝试的写了个regist的action在JS 的function regist()方法调用,然而它并不执行那个regist()方法,是我JS出错了还是我注册按钮那里写的有问题

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧