项目中用到Struts2框架的s:action标签,具体什么意思,怎么用,在这就不多说了,网上很多介召,这里主要说一下用s:action标签所遇到的一个问题:
Question-A
:在主页面里包含s:action标签,首次加载主页面时,s:action可以正确执行(请求后台Action),并返回执行结果,这时submit主页面,并将执行结果再次返回到主页面,这时发现s:action不执行(还是上次的执行结果
)。
经分析,原因可能如下:
R-A:
猜测可能是web服务器,tomcat对页面代码进行了缓存,所以没有再次去请求被包含的s:action。于是在每次执行s:action时,添加一个随机数,如下:
<s:param name="tag"><s:property value="model.tag"/></s:param>
经过测试问题解决。
网上还有一种s:action标签不执行的情况,如下:
Question-B
:提交表单 -> 服务器对表单数据进行验证(使用Struts2的validation框架) -> 验证错误,返回INPUT页面。逻辑很简单,问题出在当验证失败返回到INPUT页面时,这个页面包含的<s:action>标签不执行。
<s:action>标签允许在JSP页面中直接调用Action,并可以将这个Action执行后返回的资源加载到此页面中。
我的这个INPUT页面包含两部分,左边是由<s:action>返回的一个列表页面,右边是表单页面。经过研究发现,的确是由于表单验证失败造成的。
Struts2在执行action方法前,都要先执行validateXXX()和 validate()方法来进行表单验证,由于我这里使用了表单验证机制,所以如果在验证时发现错误,则会将错误信息放入filedError中,并跳过 action方法,直接返回到INPUT指定的视图中。
这样,当返回INPUT视图后,视图中再通过<s:action>去请求另一个 action时,会将之前filedError一起带入到这个action中,这个action(即newsList)同样也需要调用validate方法进行验证,当发现了存在filedError后,就会立即返回到这个action指定的input视图中,而并不执行这个action的逻辑方法。因此,也就出现了上面的action执行失败的问题了。
R-B:
既然是由于发现filedError造成的,那么要解决这个问题,只需要写一个校验newsList action的方法,并在这个方法中将filedError清除就可以了。这样,当struts调用这个action的校验方法时,将错误清除,这样就可以继续向下执行这个action了。于是,左边的列表页面又显示出来了。
参考连接:http://tangshuo.iteye.com/blog/549842
分享到:
相关推荐
### Struts2 `<s:if>` 标签使用详解 #### 概述 Struts2 是一款基于 Java 的企业级 Web 应用框架,它利用了 MVC(Model-View-Controller)架构模式来帮助开发者构建可扩展、易于维护的 Web 应用程序。在 Struts2 中...
2. **s:action** - 执行Action标签 此标签允许你在JSP页面上直接调用Action,无需通过HTML链接。示例如下: ```jsp <s:action name="tag2" executeResult="false" /> ``` 这会执行名为`tag2`的Action,`...
### Struts2中的S标签详解 #### 一、概述 Struts2框架是Apache软件基金会下的一个开源项目,它提供了一种基于MVC(Model-View-Controller)设计模式的Web应用开发框架。Struts2提供了丰富的标签库,其中“S标签”...
13. **s:action标签**:执行一个Struts2 Action,可以嵌套其他Struts2标签,实现动态内容生成。 14. **s:include标签**:包含其他JSP页面,类似于JSP的<jsp:include>,但支持动态参数传递。 15. **s:url标签**和**...
Struts2 标签列表及说明 Struts2 是一个基于 Java 语言的 Web 应用程序 Framework,它提供了许多标签来帮助开发者快速构建 Web 应用程序。下面是 Struts2 的标签列表及说明: A: * <s:a>:超链接,类似于 HTML ...
这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...
Struts 2 标签库(文档手册) Tags-API-CLSW-JSP <%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. <s:a href=""></s:a>-...
- 引入Struts2标签库:在JSP页面头部添加`<%@ taglib prefix="s" uri="/struts-tags"%>`。 - 在Action中定义相关属性和方法。 - 在JSP页面中使用标签,如`s:textfield name="username"`绑定Action的username属性...
- `s:action`:执行一个Struts2动作,可以重定向或转发。 - `s:if`、`s:else`、`s:choose`:条件判断,类似Java中的if-else语句。 2. **展示标签库**: - `s:iterator`:遍历集合并渲染每个元素,常用于表格数据...
### Struts2 S 标签库详解 #### 引言 Struts2 是一款流行的 Java Web 开发框架,它提供了一系列强大的功能来帮助开发者构建健壮的 Web 应用程序。其中,Struts2 的标签库是其核心特性之一,为开发者提供了丰富的 ...
1. **Action标签**:这类标签主要用于调用Action类的方法。最常见的是`<s:action>`,它执行一个Action并可以返回一个结果页面。例如: ```xml <s:action name="login" executeResult="true" /> ``` 这行代码将...
Struts2 标签库详解 Struts2 提供了一个强大的标签库,用于简化 Web 应用程序的开发过程。这些标签可以分为两类:通用标签和 UI 标签。下面,我们将详细介绍 Struts2 标签库的使用。 4.1 通用标签 通用标签用来...
首先,Struts2的标签库分为核心标签库和结果标签库,核心标签库主要用于处理表单、数据展示等,而结果标签库则与Action的结果输出有关。 1. **核心标签库**: - **s:property**:用于显示对象的属性值,例如`s:...
1. Action标签:用于执行一个Struts2 Action,如`s:action`。 2. Result标签:用于在Action执行后显示结果页面,如`s:result`。 3. Form标签:用于创建表单,如`s:form`。 4. Field标签:用于处理表单字段,如`s:...
1. **动作标签**:这些标签主要用于执行特定的Struts2动作,如`s:action`标签用于执行一个Struts2动作,`s:url`用于创建URL,`s:a`则用于创建链接。这些标签通常与Struts2的配置文件相结合,可以传递参数,实现动态...
- **`<s:action>`**:用于执行Action,类似于Struts1中的`<s:send>`标签。但Struts2的`<s:action>`提供了更高级的功能,比如可以通过name属性指定Action的名称,并且可以使用额外的参数来传递数据。 #### 2. `<s:...
这只是Struts2标签库的一小部分,实际上还有更多标签,如动作标签(`s:action`)、标签选择器(`s:ifequals`、`s:switch`等)以及与国际化相关的标签。Struts2的这些标签极大地提高了开发效率,让开发者可以专注于...
- **动作标签**:如`s:action`、`s:url`,用于执行Action并生成相应的URL。 - **表单标签**:如`s:textfield`、`s:checkbox`、`s:radio`,用于创建输入控件,并自动绑定到Action的属性。 - **结果标签**:如`s:...
7. `s:action`: 用于执行一个Struts2 Action,可以包含在页面跳转和条件逻辑中。 8. `s:property`: 显示Action或session中的属性值,是展示数据常用标签。 9. `s:if` 和 `s:else`: 条件判断标签,类似于Java的if-...