访问struts2包括struts if struts中另一个jsp页面中的param值

时间:2011-11-11 10:37:02

标签: struts2 struts

我在jsp页面中传递include标签中的param值,如下所示

    <s:include   value="../../commonjspf/status.jspf"> 
        <s:param name="mystatus" value="%{status}">
       </s:param>
    </s:include>

其中状态变量来自动作类。

我想在struts中的status.jspf页面中访问mystatus param if tag,以便与我的默认值进行比较。

    <s:if test ="">
    </s:if>

  <s:set name="" value =""/>

以上任何标签。

我该如何访问?

请建议我。

感谢。

5 个答案:

答案 0 :(得分:8)

使用${param.ParamName}表示法访问它们,如下面的参考文献中所述:

http://struts.apache.org/2.0.14/docs/include.html

示例代码:

第1页:

        <s:include value="testPage.jsp">
            <s:param name="mystatus">TestThis</s:param>
        </s:include>

第2页:

<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="mystatus" value="${param.mystatus}" scope="page"/>
<s:if test='%{#attr.mystatus == "TestThis"}'>
    This is what we want
</s:if>
<s:else>
    This is not what we want
</s:else>

答案 1 :(得分:4)

通过标记无法在呈现的页面中访问提供给包含页面的任何其他参数,因为不会创建任何valuestack。 有关详细信息,请参阅Struts2文档。

Struts2 Include tag

但是,您可以通过HttpServletRequest对象在servlet中访问它们,或者通过scriptlet在类似于

的JSP页面中访问它们。
${param.ParamName}

答案 2 :(得分:4)

我想把它作为使用struts include标签的替代方法。

您可以使用jsp:include标记并使用struts s:push标记将参数推送到堆栈并在包含的页面中使它们可用,它会在jsp中添加几行额外的行但是因为您可以将对象而不仅仅是字符串传递到包含的JSP中,所以更加灵活。

推送标签的性质意味着一旦完成参数再次从堆栈中进行加密。

主要JSP

    <s:push value="#{'someStringParam':'some string', 'someObjectParam': someObject}">
    <jsp:include page="../includes/user-tabs.jsp" />
    </s:push>

包含JSP

<s:property value="someStringParam" />

<s:if test="someObjectParam.someValue > 10">
    Result!
</s:else>

答案 3 :(得分:2)

根据詹姆斯的回答,这帮助了我的第2页:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page isELIgnored="false" %>
<c:set var="mystatus" value="${param.mystatus}" scope="page"/>
<c:if test="${empty mystatus}">
  <c:set var="mystatus" value="default status here" />
</c:if>

答案 4 :(得分:1)

如果要将值从一个页面传递到另一个页面(如下所示),请注意语法。你需要在传递的名称文本周围加上单引号,否则它被认为是变量的名称。

<s:include value="other.jsp">
   <s:param name="thevar" value="'text i want to see'" />
</s:include>

然后在“other.jsp”页面中,如果您执行以下操作,您将看到“我想看的文字”:

${param.thevar}

如果您没有在param value属性中放置单引号,则在other.jsp页面中看不到任何内容。

我只是提到它,因为我已经看过很多次了。