【问题标题】:accessing the scriptlet variable in the struts2 <s:if> tag访问 struts2 <s:if> 标记中的 scriptlet 变量
【发布时间】:2012-04-11 11:22:48
【问题描述】:

我在我的jsp中通过以下方式在scriptlet中创建了变量

<% int count= 0; %>

基于某些条件,我正在增加变量值......(现在认为'count'值为5

现在,如果 'count' 值为 0,我必须使用 struts2 标签进行一些处理

我尝试了以下方法。但我失败了......

<s:if test="#count == 0" > 
   --------
   -------- 
</s:if>  

<s:if test="%{#count == 0}" >  
</s:if>  

提前致谢

【问题讨论】:

  • 你为什么要用scriptlet来做呢?没必要。在任何情况下,您都需要将 scriptlet 变量放入普通的 JSP 作用域(或放入值堆栈,但更容易将其放入作用域)。

标签: jsp struts2


【解决方案1】:

不要使用小脚本

<s:bean name="org.apache.struts2.util.Counter" var="counter">
   <s:param name="first" value="0"/>
   <s:param name="last" value="5" />
</s:bean>

<s:iterator value="#counter">
  <li><s:property /></li>
</s:iterator>

它将打印 0 到 5。

【讨论】:

  • 虽然如果要在迭代器中使用 status 属性会更好...
【解决方案2】:

每个人都告诉你这不是一个好主意......如果你想要一个坏主意,那么:

以下必须在 JSP 的顶部:

<%@ page import="com.opensymphony.xwork2.ActionContext" %>
<%@ page import="com.opensymphony.xwork2.util.ValueStack" %>

跟随你的 JSP 中的某个地方:

<%
    int i = 0;
    ValueStack stack = ActionContext.getContext().getValueStack();
    stack.getContext().put("varName", i);
    stack.setValue("#attr['varName']", i, false);
%>

那么这应该可以工作:

<s:property value="#varName"/> <!-- prints 0 -->

我没有花时间对此进行测试,但这就是 struts2 set 标签的工作方式(如果不是一个好主意,它仍然有点教育意义)。

【讨论】:

  • 谢谢。它的坏方法。但我的要求是这样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
相关资源
最近更新 更多