JavaScript代码的核心在于动态修改表单元素的action属性,修改后的action属性为login!regist.action
实际上就是将该表单提交给login Action 的regist方法处理
对于使用动态方法调用的方法,例如regist方法,该方法的声明与系统默认的execute方法只有方法名不同,其它的都应该绝对相同
//开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的
//设置该常量为true,将开启动态方法调用,否则将关闭动态方法调用
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<script type="text/javascript">
function regist(){
form = document.forms[0];
form.action = "login!regist.action";
form.submit();
}
</script>
</head>
<body>
<s:form action="login">
<s:textfield label="用户名" name="username"></s:textfield>
<s:textfield label="密码" name="password"></s:textfield>
<s:submit label="注册" onclick="regist()" value="注册"></s:submit>
<s:submit label="登陆" value="登陆"></s:submit>
</s:form>
</body>
</html>
【备注:】
Struts1框架提供了DispatchAction,从而允许一个Action内包含多个处理逻辑。例如对于同一个表单,当用户通过不同的请求按钮提交表单时,应该使用Action的不同方法来处理请求。
Struts2同样提供了这种处理多个请求的Action,看下面的JSP页面。
上面的JSP页面包含两个提交按钮,但两个提交按钮分别提交给Action的不同方法处理,其中“登陆”按钮希望使用登陆逻辑来处理请求,而“注册”按钮则希望使用注册逻辑来处理请求。
此时,可以采用DMI(Dynamic Method Invocation,动态方法)调用来处理这种请求,动态方法调用是指表单元素的action并不是直接等于某个Action的名字,而是以如下形式来指定Form的action属性:
action="ActionName!methodName.action"
于上面JSP页面的“注册”按钮的代码如下:
单击“注册”按钮时将触发regist函数,该函数的代码如下:
function regist()
{
//获取JSP页面中的一个表单元素
targetForm = document.forms[0];
//动态修改目标表单的action属性
targetForm.action = "Login!regist.action";
//提交表单
targetForm.submit();
}
上面JavaScript代码的核心在于动态修改表单元素的action属性,修改后action属性为:Login!regist.action,其实质就是将该表单提交给login Action的regist方法处理。
login Action类的代码如下:
public class LoginRegistAction extends ActionSupport
{
//封装用户请求参数的两个属性
private String username;
private String password;
//封装处理结果的tip属性
private String tip;
//username属性对应的setter和getter方法
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
//password属性对应的getter和setter方法
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
//tip属性对应的setter和getter方法
public String getTip()
{
return tip;
}
public void setTip(String tip)
{
this.tip = tip;
}
//Action包含的注册逻辑
public String regist() throws Exception
{
ActionContext.getContext().getSession().put("user" , getUsername());
setTip("恭喜您," + getUsername() + ",您已经注册成功!");
return SUCCESS;
}
//Action包含的默认处理逻辑
public String execute() throws Exception
{
if (getUsername().equals("scott")
&& getPassword().equals("tiger") )
{
ActionContext.getContext().getSession().put("user" , getUsername());
setTip("欢迎," + getUsername() + ",您已经登陆成功!");
return SUCCESS;
}
else
{
return ERROR;
}
}
}
图
4.1所示的JSP页面中的“登陆”按钮就是一个普通按钮,没有任何特殊之处,当浏览者单击“登陆”按钮时,系统将提交给对应Action的默
认方法处理。当浏览者单击“注册”按钮时,系统将提交给login
Action的regist方法处理。因此,如果单击“注册”按钮,将看到如图4.2所示的页面。
通过这种方式,我们可以在一个Action中包含多个处理逻辑,并可以通过为表单元素指定不同action属性来提交给Action的不同方法。
对于使用动态方法调用的方法,例如regist方法,该方法的方法声明与系统默认的execute方法的方法声明,只有方法名不同,其他方法参数,返回值类型都应该绝对相同。
注意:使用动态方法调用必须设置Struts2允许动态方法调用。开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的,设置该常量的值为true,将开启动态方法调用;否则将关闭关闭动态方法调用。
注意
关键字:
javascript
Javascript Error: submit is not a function
有时候需要用javascript提交表单,这个时候我们会用javascript:userform.submit();可是我在这样做的时候怎么也提交不成功,报出javascript错误
Javascript Error: submit is not a function。百思不得其解,后来查阅资料才发现,在用userForm.submit()
提交表单的时候,表单里面不能有name="submit"的元素,否则在提交的
时候,该对象会和submit();方法发生混淆造成该错误!! 切记,切记!
分享到:
相关推荐
在Struts2中,JavaScript可以用来发起Ajax请求,动态调用后台Action的方法。例如,我们可以使用jQuery的`$.ajax`或`$.post`方法,配合Struts2的ActionContext,将请求参数传递给服务器。在服务器端,Struts2会解析...
下面将详细介绍几种常见的JavaScript调用Struts Action的方法: - **通过修改URL来触发Action** ```javascript function formSubmit(url) { document.forms[0].action = url; document.forms[0].submit(); } ...
通过这个实例,你可以深入理解Struts2框架的MVC模式、Action、验证机制以及动态方法调用。实际操作将帮助你更好地掌握这些概念,并能够灵活应用到其他Web项目中。记得在MyEclipse环境中运行此实例,以便直观地观察每...
在提交事件处理函数中,可以再次调用formValidator的validate方法确保数据有效,然后使用Ajax提交表单,这样可以实现无刷新的用户体验。 6. **Struts2 Action处理**:在后台,Struts2 Action会接收到Ajax请求,对...
这种方法的优点在于,即使Struts2的动态方法调用失效,我们仍然能够通过JavaScript控制Action的调用路径。同时,这样的实现方式也增加了代码的灵活性,可以根据需要动态地改变Action的调用。 总结来说,当Struts2的...
假设我们需要在一个Struts2项目中实现如下功能:点击某个按钮后弹出一个包含表单的模态对话框,在用户完成表单填写并提交后,需要刷新父页面。 1. **定义弹出对话框的方法**: ```javascript function addFlfg() ...
3. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要为批量提交的Action定义一个映射。 ```xml <action name="batchSave" class="com.example.BatchSaveAction"> <result name="success">/success...
5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认的表达式语言,用于在Action与视图之间传递数据,支持动态属性访问和方法调用。 6. **插件系统**:Struts2拥有丰富的插件库,如Tiles、...
Struts2是一个基于MVC设计模式的Java Web框架,DWR则是一个用于简化AJAX开发的库,允许前端JavaScript直接调用后端Java方法。 **DWR (Direct Web Remoting)** DWR是一种开源的Java库,它允许在浏览器端的JavaScript...
动态方法调用(Dynamic Method Invocation,DMI)是Struts框架中的一个重要特性,允许开发者根据不同的请求调用Action类的不同方法,实现灵活的业务逻辑处理。在本例中,我们讨论的是如何结合通配符来更高效地使用...
在处理完业务逻辑后,Action可以通过`ActionSupport`的`setFieldErrors()`、`addMessage()`等方法设置结果,然后返回一个表示成功或失败的结果名称。 当Ajax请求成功时,jQuery的`success`回调函数会被调用,你可以...
8. 实例演示:使用Struts2+Jquery+Ajax实现动态加载数据或表单验证 "struts2 jar"文件包含了Struts2框架的核心库,可能包括struts2-core、struts2-convention、struts2-json-plugin等依赖,这些是开发Struts2应用必...
在Struts2中,你可以创建一个Action类来处理注册请求,这个类通常会有一个与表单对应的Java对象作为属性。每个属性对应一个字段,可以通过`@FieldValidator`注解定义验证规则。此外,还需要在`struts.xml`配置文件...
Struts是Apache软件基金会(ASF)赞助的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。Struts在Java社区中被广泛使用,为开发者提供了一种组织应用程序结构和控制流程的方式...
表单提交事件应该触发一个JavaScript函数,使用Ajax发送登录请求到Struts2 Action。 2. **编写Action类**:在Java代码中创建一个Action类,处理登录请求,验证用户名和密码,如果验证成功,则设置会话属性表示用户...
8. **插件**:Struts2有一个丰富的插件生态系统,如Struts2 Dojo Plugin提供了与Dojo JavaScript库的集成,Struts2 jQuery Plugin提供了与jQuery的集成,极大地丰富了前端交互功能。 9. **异常处理**:Struts2提供...
服务器端验证通常在Action类或ActionForm的validate()方法中进行,这个方法会在Action的execute()方法之前被调用。如果验证失败,ActionForm会存储错误消息,然后转发回表单页面显示错误信息。 对于"spring_struts_...
在本文中,我们将探讨如何使用Struts2和jQuery EasyUI框架创建一个简单的CRUD(创建、读取、更新、删除)系统。首先,我们需要理解这两个技术的基础概念。 Struts2是一个基于MVC(Model-View-Controller)架构的...
2. **处理用户点击刷新验证码**:当用户点击刷新验证码按钮时,JavaScript可以发起一个新的Ajax请求,调用Struts2 Action来重新生成验证码,并更新页面上的图片。 3. **表单提交前验证**:在用户提交登录表单之前,...