struts逻辑标记:仅适用于表单bean参数?

时间:2011-02-16 02:20:46

标签: struts-1

我正在重构现有的Web应用程序以使用struts标记而不是scriptlet。发生多重关系的事情之一是条件检查,如

<%if ("true".equals(requset.getparameter("someParam"))) {%>

some html, javascript

<%else{%>
some other html,javascript
<%}%>

我希望用struts逻辑标记替换它来替换scriptlet。是否可以在不将forParam存储在formbean中的情况下执行此操作?默认情况下,逻辑标记的语法似乎只适用于formbean参数。

1 个答案:

答案 0 :(得分:1)

虽然不是struts特定的解决方案:您是否考虑过使用JSTL自定义标签?标签包含在最新的Web容器规范中,并且可以轻松添加默认情况下不包含JSTL规范的旧Web容器。

以下是基于JSTL的解决方案:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
...
<c:choose>
  <c:when test="${param.someParam eq 'true'}">
    some html, javascript
  </c:when>

  <c:otherwise>
    some other html, javascript
  </c:otherwise>
</c:choose>

除非您使用struts自定义标记来生成UI组件,否则始终首选使用JSTL标准标记。但是,如果你使用struts,这是Struts 1的一个例子:

<bean:parameter id="paramValue" name="someParam" />
<logic:equal name="paramValue" value="true">
  some html, javascript
</logic:equal>

<logic:notEqual name="paramValue" value="true">
  some other html, javascript
</logic:notEqual>

您将注意到此解决方案接受请求参数并放入页面范围属性(paramValue),然后可由struts逻辑自定义标记访问。