struts2 include标签传入参数的调用 收藏
最近用Struts2框架开发一个项目。为保证页面代码美观,想把那些高度模式化的代码归并到同一个jsp中,然后利用标签初始化调用。
不过遇到一个问题。就是当利用Struts2的 <s:include>标签在主页面引用子页面时,通过<s:param/>标签传入的值在子页面中无法获取:
主页面:
<s:include value="./pair_ticket.jsp">
<s:param name="operation" value="'active'"></s:param>
</s:include>
pair_ticket.jsp是被引用的页面。但是如果在pair_ticket.jsp中利用
<s:property value="#request.operation"/>
或是<s:property value="operation"/>
或是<s:property value="%{#attr.operation}"/>
都无法获得从主页面中传过来的值。
看了Struts2的文档,说是由于include不会更新valueStack的缘故,所以ognl无法从valueStack中获取。同时文档介绍使用jstl可以在页面中获取:
${param.operation}
尝试过以后,发现果不其然。不过由于本人的子页面中充斥着大使用ognl的Struts2标签,而Struts2标签中又无法嵌套jstl标签或el表达式。所以这样无异于要求我重写页面代码,将所有需要变量的地方用html标签重写,这个哪里受得了?!
思量许久,突然想到,既然引入的时候,Struts2不会设置valueStack,为何不自己亲手设置?
因为文档中提到虽然ognl不能使用,但是jstl和scriptlet依然有效。于是子在页面开头写下如下代码:
<%@page import="com.opensymphony.xwork2.ognl.OgnlValueStack"%>
<%
((OgnlValueStack) request.getAttribute("struts.valueStack")).set(
"operation", request.getParameter("operation"));
%>
第一个伪指令引入了ognl所要使用的valueStack包,接下来scriptlet中的两句将主页面通过request传过来的参数,直接设置到valueStack中。
于是页面中的Struts2标签就可以使用变量了:
<s:submit id="%{operation}" value="%{getText('label.pair.'+operation)}" />
甚至还可以使用功能强大的ognl表达式做字符串拼接:
<s:textarea name="ticket.comment" id="%{operation+'_comment'}">
如果遇到普通的html标签,或者只是页面显示,那么就使用el语言:
${param.operation}
呵呵。刚开始也着实被这样古怪的问题所困扰,网上寻找了半天也没有找到有效的解决方案。不过毕竟车到山前必有路,多看看文档,多探索一下框架的机理,总归能找出解决的方案的:)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/james_wu_shanghai/archive/2009/03/29/4034739.aspx
分享到:
相关推荐
14. **s:include标签**:包含其他JSP页面,类似于JSP的<jsp:include>,但支持动态参数传递。 15. **s:url标签**和**s:a标签**:创建链接,s:url用于构建URL,s:a则用于创建超链接,支持动态参数和Action调用。 16....
2. 使用自定义标签:在页面中调用自定义标签,传递属性值。 ```jsp ${user.id}" /> ``` 四、处理标签逻辑 在`DisplayUserInfoTag`类中,我们需要覆盖`doStartTag()`和`doEndTag()`方法,根据传入的属性值(如`...
4. `<s:action>`:此标签用于执行一个Struts2动作,可以传递参数并获取返回结果。 5. `<s:if>`和`<s:else>`:这些标签用于条件判断,类似于Java中的if-else语句。 6. `<s:iterator>`:用于遍历集合,如数组或列表...
### Struts2 S 标签库详解 #### 引言 Struts2 是一款流行的 Java Web 开发框架,它提供了一系列强大的功能来帮助开发者构建健壮的 Web 应用程序。其中,Struts2 的标签库是其核心特性之一,为开发者提供了丰富的 ...
1. **Action标签**:这是Struts2最基础的标签,用于调用Action并执行业务逻辑。例如`<s:action>`标签可以用来执行一个特定的Action,同时支持参数传递。 2. **Field标签**:这一系列标签用于处理表单输入,如`...
- `<s:action>` 标签主要用于调用Struts2中的Action。在JSP页面中,此标签可以指向特定命名空间内的某个Action,并且标签体通常用于展示Action处理的结果。 - **使用示例**: 在`success.jsp`文件中,通过`...
27. `<s:param>`:为其他标签提供参数,可以传递值给其他标签使用。 28. `<s:password>`:创建一个密码输入框,输入内容会被遮罩。 29. `<s:property>`:获取并显示对象的属性值,`value`属性用于指定属性名。 30...
1. **Action标签**:用于执行一个特定的Action,例如`<s:action>`,它可以调用Action并传递参数,返回的结果可以是整个页面或部分页面内容。 2. **Display标签**:用于展示数据,如`<s:textfield>`用于创建输入字段...
6.2.1 Struts 2标签API语法 113 6.2.2 使用OGNL设置标签属性 115 6.3 数据标签 117 6.3.1 property标签 117 6.3.2 set标签 118 6.3.3 push标签 119 6.3.4 bean标签 120 6.3.5 action标签 122 6.4 控制标签 124 6.4.1...
本文将详细讲解Struts2中的各种标签,帮助开发者更好地理解和使用这个框架。 A. `<s:a>` 和 `<s:action>`: 1. `<s:a>`:用于创建超链接,与HTML的`<a>`标签类似,但更加强大,可以传递参数,支持动作映射。 2. `...
- `<bean:include>`:包含其他JSP页面,同时可以传递参数。 - `<bean:message>`:获取并显示国际化消息资源文件中的消息。 - `<bean:namespace>`:用于处理命名空间,可以用来组织和隔离标签。 - `...
`<s:param>`:为其他标签提供参数,常用于传递额外的请求参数。 X. `<s:password>`:创建密码输入框,用于安全地输入密码。 Y. `<s:property>`:输出指定属性的值,可以从ValueStack中获取数据。 Z. `<s:push>`...
- `s:url` 和 `s:a` 标签:生成URL链接,支持动态参数传递和Action调用。 4. **国际化和本地化** - `s:text` 和 `s:resourcebundle`: 实现应用的多语言支持,通过不同的locale加载相应的资源文件。 5. **验证和...
- **参数传递**:表单控件的`name`属性必须与Java Action类中的属性名一致,才能通过Struts2框架自动完成参数的绑定。例如,在表单中使用`<input type="text" name="username" />`,那么在Action类中就需要有对应的...
`<s:param>`:为其他标签提供参数,可以传递额外的数据。 Q. `<s:password>`:创建一个密码输入框,保证输入内容不被明文显示。 R. `<s:radio>`:生成单选按钮,`list`属性用于定义可选值。 S. `<s:reset>`:...
`<s:param>` 标签用于向URL或其他标签传递参数。 ### 29. `<s:password>` 标签 `<s:password>` 标签用于创建密码输入框,输入的字符会被掩码。 ### 30. `<s:property>` 标签 `<s:property>` 标签用于显示模型...
1. `<s:a xhref="">` - 创建超链接,与HTML的`<a>`标签类似,但增加了Struts2的功能,如动作调用、参数传递。 2. `<s:action name="">` - 执行视图中的一个Action,可以直接在页面上调用Action方法。 3. `...
3.3 把静态参数传递给一个动作 41 3.4 ActionSupport类 41 3.5 结果 42 3.5.1 Chain 43 3.5.2 Dispatcher 44 3.5.3 FreeMarker 44 3.5.4 HttpHeader 44 3.5.5 Redirect 45 3.5.6 Redirect Action 46 3.5.7 ...
- **简介**:Struts2支持动态调用Action,即允许用户通过特定格式的URL来调用不同的方法。 - **格式**:`actionName!methodName`,其中`actionName`是Action的名字,`methodName`是Action中要调用的方法名。 #### ...