今天写项目时遇到了这样的问题:
要实现一个修改个人信息的问题,第一次点击连接时执行的是查询的action,当把要修改的内容写好后,点击修改按钮提交表单。如果填写的数据规范没问
题,如果不规范,就不会通过validate,进而跳转到input页面,返回查询页面让用户重新输入。结果出现问题,在网上找了大半天。没有结果,不过
还好找到了提同样问题的童鞋~~他是这样描述的:
“有个问题是这样的
A.jsp(点击一个超链接)-->
A.action(在后台取数据, 比如取了一个list放在ActionContext]里,
然后dispatcher到B.jsp)-->
B.jsp(把list显示出来, 同时在表单输入别的数据, 提交)-->
B.action(对B.jsp里的数据进行效验, 如果错误...)
现在问题就来啦, 当在B.action里效验错误的时候, 我应该怎么返回输入页面让用户重新输入呢,
如果dispatcher到一个B.jsp, 那从后台取出的list就没有了,
如果redirectAction到A.action重新取数据, 那错误提示信息fieldError就不见了
两难啊!!! 大家是怎么解决这个问题的?”
public String
execute() throws Exception
{
ActionContext ctx =
ActionContext.getContext();
ctx.put(
"listTemp" , new
ArrayList());
return SUCCESS;
}
后来我仔细分析了一下,后台的list之所以没有数据时因为,程序没有执行到execute方法,因为在validate方法那就已经没通过,所以直接跳转到input页面了。
再仔细查找了相关资料 发现apache的文档
http://struts.apache.org/2.x/docs/how-do-we-repopulate-controls-when-validation-fails.html中写道
When validation fails, we typically forward back to the same server
page, so that the errors can be presented, and so that the client
can fix the problem and resubmit the form. Of course, aside from
the errors, we may also need to present rich controls, like drop
down lists.
If we try to populate rich controls in an Action method, like input
or execute , and validation fails, the method will not be invoked,
and the controls are not populated. Two alternative ways to
populate controls are the Preparable interface and the action
tag.
大致的意思是但出现validation错误的时候会影响到Action的正常执行,这个时候应该实现Preparable
接口中的prepare()方法,这个方法中的操作不会因为validation错误而不执行。
联想到上面的错,会不会也是因为addActionError而导致不能正常使用action标签了。为此在input的Action中实现Preparable接口并在prepare()方法中put
listTemp。修改代码如下
public
class Sxt_DaoHang_XianShiAction
extends
ActionSupport
implements Preparable{
@Override
public
String execute() throws
Exception {
return SUCCESS;
}
public void
prepare() throws Exception
{
ActionContext ctx =
ActionContext.getContext();
ctx.put( "
listTemp " , new ArrayList());
}
}
执行---成功
原来prepare是在validate拦截器之前执行的。因此可以把一些初始化的工作放到prepare方法中去执行
http://blog.sina.com.cn/s/blog_4b6f8d150100i9wm.html
相关推荐
这个标签在Struts1中没有直接对应的标签,但在Struts2中非常有用,特别是在需要用户选择多个选项的情况下。 - **`<s:combobox>`**:类似于HTML的下拉列表框,但提供了更多功能,如自动完成、动态加载等特性。 ####...
输入校验的流程在Struts2中是结构化的,涉及多个步骤: 1. **类型转换**:首先,Struts2框架使用类型转换器将HTTP请求中的字符串参数转换为相应的Java类型,如Integer、Date等,并将这些值设置为Action类的属性。 ...
- **Struts2的数据传递**:在Struts2中,表单数据不是通过ActionForm对象传递给Action的,而是直接绑定到Action类的属性上。这种方式简化了数据传递的过程,并且提供了更好的灵活性。 #### 6. 类型转换技术及其配置...
在Struts2中,处理程序方法可能会抛出各种异常,为了提供统一的错误处理和用户友好的异常提示,我们可以定义全局异常提示。这篇博文主要探讨的是如何在Struts2中设置和使用全局异常提示属性文件。 首先,我们要理解...
在Struts2中,OGNL被用来在Action和视图之间传递数据,如在JSP中使用`<s:property value="%{variable}"/>`来输出Action中的变量值。 6. **表单数据校验(Validation)**: - Struts2提供了一套完整的验证框架,允许...
6. **Action和Result**:在Struts2中,每个Action类对应一个业务逻辑,Result表示Action执行后的跳转路径,可能是另一个Action,也可能是一个视图资源(如JSP)。 7. **拦截器(Interceptors)**:Struts2的拦截器...
在JSP中,我们通常使用`<%@ taglib prefix="s" uri="/struts-tags" %>`来引入Struts2的标签库。下面将详细介绍一些重要的Struts2标签及其功能。 **A. 超链接和Action标签** - `<s:a href=""></s:a>`:创建一个...
在Struts2中,通过实现特定的Aware接口(如RequestAware、SessionAware、ApplicationAware),可以实现对请求、会话和应用范围内的对象的依赖注入。 14. **默认Action**: - `default-action-ref`定义了一个默认的...
这样可以在多个Action之间共享模型对象。 16. **Params (参数处理)** - **说明**:用于处理HTTP请求中的参数,并将其设置到Action对象的相应属性上。 17. **Prepare (预处理)** - **用途**:如果Action实现...
这篇博客“Struts2 Action方法的校验一”很可能是关于如何在Struts2中对Action方法进行数据验证的探讨。 数据验证是Web应用开发中必不可少的步骤,用于确保用户输入的数据符合预设的规则和格式,从而防止非法数据...
下面将详细介绍Struts2中的部分核心标签及其用法。 A. `<s:a>` 和 `<s:action>`: - `<s:a href="">` 标签用于创建超链接,它可以绑定到一个Action,使得链接具有动态性。例如,`<s:a href="myAction.action">Click ...
Struts2 ValidateDemo 是一个基于Struts2框架的示例项目,主要展示了如何在Struts2中进行数据验证。Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中,而数据验证是其关键功能之一,...
而在 Struts2 中,所有的标签都被统一管理,并通过在 JSP 文件头部声明 `<%@ taglib prefix="s" uri="/struts-tags" %>` 来启用 Struts2 的标签库。这种方式简化了开发过程中的配置工作,使得开发者可以更加专注于...
在Struts2中,表单标签是其核心组件之一,用于处理用户输入并展示数据。与传统的HTML表单标签相比,Struts2的表单标签提供了更多的功能和灵活性,能够更好地集成到MVC架构中。 1. **表单标签的基本结构**: Struts...
Struts2 Tags API是Struts2框架中一个关键的部分,它提供了一系列的标签库,用于在JSP页面中简化视图层的开发。Struts2 Tags API使得开发者能够轻松地与Action、结果类型、主题、国际化等核心概念交互,极大地提高了...
在Struts2中,所有的标签都统一在`<s>`前缀下,通过引入`<%@ taglib prefix="s" uri="/struts-tags" %>`就可以在页面上使用这些标签。 **A组标签:** 1. `<s:a>` - 用于创建超链接,与HTML的`<a>`标签类似,可以...
4. **OGNL表达式语言**:Struts2使用OGNL(Object-Graph Navigation Language)作为默认的表达式语言,它用于在Action和视图之间传递数据,提供了强大的对象导航和表达能力。 5. **结果类型和模板技术**:Struts2...
9. **异常处理**:Struts2提供`<s:actionerror>`、`<s:fielderror>`和`<s:globalerror>`标签来显示Action级、字段级和全局级的错误信息,有助于快速定位和解决用户输入的问题。 10. **动作调用**:`<s:action>`标签...
2. `<s:action>`:执行一个Struts2 Action,可以设置execute result和redirect属性,实现页面跳转。 3. `<s:url>`:生成URL,支持添加参数,常用于链接生成。 三、展示标签 展示标签主要用于数据展示和表格处理,如...