带有动态参数的Struts嵌套标记

时间:2010-09-29 20:18:29

标签: java jsp struts struts-1

我有一个使用嵌套标记的传统Struts 1应用程序。我可以将动态参数注入嵌套标记吗?例如,

<nested:select disabled="<c:out value='${requestScope.disableSelectBox}' />" />

我也尝试过:

<nested:select disabled="${requestScope.disableSelectBox}" />

在上述两个示例中,disabled属性未正确设置且被忽略。如果我使用c:out打印输出值,则会显示disableSelectBox的正确值:

<c:out value="${requestScope.disableSelectBox}" />

一位同事建议我使用:

<nested:select disabled="<%=request.getAttribute("disableSelectBox"); %>" />

麻烦的是,在JSP页面中使用java scriplets被认为是不好的做法。有没有办法将动态变量嵌入到Struts 1嵌套标记中?切换到Struts 2不是一种选择。

谢谢!

1 个答案:

答案 0 :(得分:1)

Struts 1(据我所知)不允许你这样做:

<nested:select disabled="<c:out value='${requestScope.disableSelectBox}' />" />

由于无法在其任何属性声明中处理JSP标记,请检查nested:select disabled属性所需需要什么。

但是Struts确实支持EL和JSP Scriplets(所以你的同事是正确的)。 JSP Scriptlet将“呈现”<%=request.getAttribute("disableSelectBox"); %>的值并将其分配给<nested:select disabled="<%=request.getAttribute("disableSelectBox"); %>" />

所以(如果我假设值返回true或false,

<nested:select disabled="${requestScope.disableSelectBox}" />

<nested:select disabled="<%=request.getAttribute("disableSelectBox"); %>" />

将呈现为(如果结果返回true)

<nested:select disabled="true" />

在将其发送到Struts以呈现嵌套标记之前(抱歉使用“render”一词,如果需要,可以使用translate)。