为index的Action中重写excute方法如下:
@Override
public String execute() throws Exception {
this .addActionError( " 系统错误 " );
return SUCCESS;
}
对应的SUCCESS是一个ftl模板,使用了Struts2的action标签:
<@s.action name="input" namespace="/admin" executeResult=true ignoreContextParams=true />
名为input的Action中重写excute方法如下:
@Override
public String execute() throws Exception {
ActionContext ctx = ActionContext.getContext();
ctx.put( "listTemp" , new ArrayList());
return SUCCESS;
}
对应的SUCCESS也是一个ftl模板:
<ul>
<#list listTemp as nav>
<li>
${nav}
</li>
</#list>
</ul>
这个时候执行代码 freemarker会提示“<pre>Expression listDaoHangLieBiao is undefined</pre>”为什么会这样了?
仔细查找了相关资料 发现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。修改代码如下
@Component("inputAction")
@Scope( "prototype" )
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());
}
}
执行---成功
总结 Struts2目前的资料相对Struts1来说是非常少的,尤其是研究的很深的资料,看来现在想学好Struts2还必须从Apache的原始资料中寻找。
另外上面使用action标签的时候是这样写的
<@s.action name="login" namespace="/admin" executeResult=true ignoreContextParams=true />
注意和Struts2的标签写法略有不同,因为这里使用了Freemarker做模板,所以使用的freemarker的写法,特别的是executeResult=true ignoreContextParams=true而按照Struts2的标签应该是executeResult="true" ignoreContextParams="true"
分享到:
相关推荐
Struts 2 标签的使用注意事项 Struts 2 是一个基于MVC架构的Java Web应用程序框架,它提供了一系列的标签来简化Web开发。然而,在使用Struts 2标签时,需要注意一些重要的事项。 首先,在使用Struts 2标签之前,...
下面我们将详细探讨Struts2标签的使用方法以及EL(Expression Language)表达式。 1. **Struts2标签库**: - **s:textfield**: 用于创建输入字段,可以设置属性如name、value、size、maxlength等。 - **s:...
在使用Struts2标签时,还需要注意以下几点: - 标签的命名空间:通常以`s:`开头,表明来自Struts2标签库。 - 属性绑定:许多标签都允许通过`value`属性绑定到Action的属性。 - 表单提交:使用`s:form`标签创建表单,...
4. **ValueStack**: Struts2使用ValueStack来存储模型对象,这些对象可以被视图层访问,以展示数据。ActionContext提供了对当前请求上下文的访问,包括ValueStack、Parameters等。 5. **OGNL(Object-Graph ...
### Struts2中Action间的参数传递方法 在Struts2框架中,经常需要实现Action之间的跳转,并在跳转过程中传递必要的参数。这种需求在实际开发中非常常见,尤其是在需要根据用户的不同操作来调用不同的业务逻辑时。...
此外,Struts2表单标签还可以与其他标签结合使用,如`<s:actionerror>`、`<s:fielderror>`和`<s:property>`,以显示验证错误信息或动态显示数据。`<s:actionerror>`显示全局错误,`<s:fielderror>`显示特定字段的...
Struts2允许在Action类和Action方法上使用注解,简化配置。例如,`@Action(value="login")`用于指定Action的名称,`@Results`注解可以定义多个可能的结果。此外,`@FieldAware`和`@Validated`注解用于字段验证。 **...
2. 使用`<s:property>`标签显示Action中的数据时,确保Action中有相应的`getter`方法。 3. 使用`<s:textfield>`标签向Action中的对象传递值时,Action需要提供相应的`getter`和`setter`方法。 4. 使用`<s:if>`标签...
在使用Struts2标签API时,需要注意以下几点: - 标签的命名空间:通常以`s:`开头,表示它是Struts2提供的标签。 - 动态属性:很多标签都支持动态属性,允许我们根据Action类的状态动态设置属性值。 - 表单标签的...
在Struts2中,Action的配置和使用方式有多种,下面将详细介绍Struts2 Action参数的详细说明。 首先,我们来看Action的配置格式。在Struts2的配置文件(通常是struts.xml)中,Action的基本配置结构如下: ```xml ...
2. **Struts2标签**:Struts2提供了一系列自定义标签来简化视图层的开发。例如,我们可以使用`<s:textfield>`标签来创建输入框,`<s:password>`标签用于密码输入,`<s:submit>`标签则用于提交表单。 ```jsp ...
本文将深入探讨Struts2中的标签,特别是与表单相关的标签,并通过实例来解释它们的使用方法。 首先,让我们关注 `<s:form>` 标签。这是Struts2中的核心表单标签,用于创建HTML表单。默认情况下,它以表格布局呈现,...
然而,需要注意的是,随着Struts框架的发展,Struts2引入了更多功能强大的标签,而Struts1.x逐渐被淘汰。在新的项目中,开发者可能需要转向Spring MVC或类似的现代框架。 7. **升级与兼容性** 如果你还在使用...
- **核心概念**:标签中的“struts2 action”指出了本书关注的一个核心概念——Action,这是Struts2框架中处理用户请求的关键组件。通过理解和掌握Action的工作原理及其相关配置,开发者可以更好地设计和实现Web应用...
这样做是为了确保Struts2在服务器启动时能优先加载这个servlet,以便支持FreeMarker模板中使用Struts2的标签。 在`struts.xml`配置文件中,定义一个action,比如`test`,并指定其结果类型为`freemarker`,这样当...
Struts2的核心是Action类,而标签库则是其视图层的重要组成部分,提供了丰富的功能来构建动态网页。在Struts2中,标签库极大地提高了开发效率,使得开发者能够更专注于业务逻辑,而不是繁琐的HTML代码。 本文将深入...
本文将详细介绍如何在Struts2中实现分页标签,并提供一个简洁易懂的项目示例。 1. **Struts2分页概念**: 分页是将大量数据分割成若干小块,每次只加载一部分数据到页面上,使得用户可以逐页浏览,减轻服务器压力...
5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在Action和视图之间传递数据。通过OGNL,可以在JSP页面中直接访问Action中的属性,或者在Action中动态设置模型数据。 6. ...
总结来说,Struts2的国际化功能通过配置、JSP标签和Action类的方法协同工作,为多语言应用提供了一套完整的解决方案。开发者可以根据项目需求,灵活地定义和引用资源文件,以便在不同的语言环境中显示适当的文本。
总的来说,Struts2的OptionTransferSelect标签提供了在Web应用中创建复杂用户界面的能力,但使用时需要注意正确的配置和数据绑定,以确保其正常工作。通过理解和熟悉这些知识点,开发者可以更有效地利用这个标签来...