`

struts2 include标签传入参数的调用

阅读更多

 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

分享到:
评论

相关推荐

    struts2标签大全

    14. **s:include标签**:包含其他JSP页面,类似于JSP的&lt;jsp:include&gt;,但支持动态参数传递。 15. **s:url标签**和**s:a标签**:创建链接,s:url用于构建URL,s:a则用于创建超链接,支持动态参数和Action调用。 16....

    tag struts2的自定义标签实例

    2. 使用自定义标签:在页面中调用自定义标签,传递属性值。 ```jsp ${user.id}" /&gt; ``` 四、处理标签逻辑 在`DisplayUserInfoTag`类中,我们需要覆盖`doStartTag()`和`doEndTag()`方法,根据传入的属性值(如`...

    第3章_Struts2标签库详解与AJAX技术应用.rar

    4. `&lt;s:action&gt;`:此标签用于执行一个Struts2动作,可以传递参数并获取返回结果。 5. `&lt;s:if&gt;`和`&lt;s:else&gt;`:这些标签用于条件判断,类似于Java中的if-else语句。 6. `&lt;s:iterator&gt;`:用于遍历集合,如数组或列表...

    struts2-s标签

    ### Struts2 S 标签库详解 #### 引言 Struts2 是一款流行的 Java Web 开发框架,它提供了一系列强大的功能来帮助开发者构建健壮的 Web 应用程序。其中,Struts2 的标签库是其核心特性之一,为开发者提供了丰富的 ...

    struts2标签集

    1. **Action标签**:这是Struts2最基础的标签,用于调用Action并执行业务逻辑。例如`&lt;s:action&gt;`标签可以用来执行一个特定的Action,同时支持参数传递。 2. **Field标签**:这一系列标签用于处理表单输入,如`...

    struts2标签使用

    - `&lt;s:action&gt;` 标签主要用于调用Struts2中的Action。在JSP页面中,此标签可以指向特定命名空间内的某个Action,并且标签体通常用于展示Action处理的结果。 - **使用示例**: 在`success.jsp`文件中,通过`...

    struts2常用标签

    27. `&lt;s:param&gt;`:为其他标签提供参数,可以传递值给其他标签使用。 28. `&lt;s:password&gt;`:创建一个密码输入框,输入内容会被遮罩。 29. `&lt;s:property&gt;`:获取并显示对象的属性值,`value`属性用于指定属性名。 30...

    struts2标签

    1. **Action标签**:用于执行一个特定的Action,例如`&lt;s:action&gt;`,它可以调用Action并传递参数,返回的结果可以是整个页面或部分页面内容。 2. **Display标签**:用于展示数据,如`&lt;s:textfield&gt;`用于创建输入字段...

    Struts2 in action中文版

    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标签详细讲解

    本文将详细讲解Struts2中的各种标签,帮助开发者更好地理解和使用这个框架。 A. `&lt;s:a&gt;` 和 `&lt;s:action&gt;`: 1. `&lt;s:a&gt;`:用于创建超链接,与HTML的`&lt;a&gt;`标签类似,但更加强大,可以传递参数,支持动作映射。 2. `...

    struts bean标签

    - `&lt;bean:include&gt;`:包含其他JSP页面,同时可以传递参数。 - `&lt;bean:message&gt;`:获取并显示国际化消息资源文件中的消息。 - `&lt;bean:namespace&gt;`:用于处理命名空间,可以用来组织和隔离标签。 - `...

    struts2标签解释

    `&lt;s:param&gt;`:为其他标签提供参数,常用于传递额外的请求参数。 X. `&lt;s:password&gt;`:创建密码输入框,用于安全地输入密码。 Y. `&lt;s:property&gt;`:输出指定属性的值,可以从ValueStack中获取数据。 Z. `&lt;s:push&gt;`...

    struts2.0标签详解

    - `s:url` 和 `s:a` 标签:生成URL链接,支持动态参数传递和Action调用。 4. **国际化和本地化** - `s:text` 和 `s:resourcebundle`: 实现应用的多语言支持,通过不同的locale加载相应的资源文件。 5. **验证和...

    struts2基本配置

    - **参数传递**:表单控件的`name`属性必须与Java Action类中的属性名一致,才能通过Struts2框架自动完成参数的绑定。例如,在表单中使用`&lt;input type="text" name="username" /&gt;`,那么在Action类中就需要有对应的...

    struts2标签.doc

    `&lt;s:param&gt;`:为其他标签提供参数,可以传递额外的数据。 Q. `&lt;s:password&gt;`:创建一个密码输入框,保证输入内容不被明文显示。 R. `&lt;s:radio&gt;`:生成单选按钮,`list`属性用于定义可选值。 S. `&lt;s:reset&gt;`:...

    struts2.0 标签清单

    `&lt;s:param&gt;` 标签用于向URL或其他标签传递参数。 ### 29. `&lt;s:password&gt;` 标签 `&lt;s:password&gt;` 标签用于创建密码输入框,输入的字符会被掩码。 ### 30. `&lt;s:property&gt;` 标签 `&lt;s:property&gt;` 标签用于显示模型...

    Struts2标签详解及具体实例解析

    1. `&lt;s:a xhref=""&gt;` - 创建超链接,与HTML的`&lt;a&gt;`标签类似,但增加了Struts2的功能,如动作调用、参数传递。 2. `&lt;s:action name=""&gt;` - 执行视图中的一个Action,可以直接在页面上调用Action方法。 3. `...

    深入浅出Struts2(附源码)

    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学习笔记

    - **简介**:Struts2支持动态调用Action,即允许用户通过特定格式的URL来调用不同的方法。 - **格式**:`actionName!methodName`,其中`actionName`是Action的名字,`methodName`是Action中要调用的方法名。 #### ...

Global site tag (gtag.js) - Google Analytics