【问题标题】:Equivalent to Struts 1.x "bean:define" tag?相当于 Struts 1.x “bean:define” 标签?
【发布时间】:2011-03-15 14:13:39
【问题描述】:

我正在将一个旧的 Struts 1.x 应用程序转换为 Spring MVC,在一些 JSP 页面中,bean:define 标记用于从资源包中获取字符串,然后在稍后使用页面:

<bean:define id="example_title"><fmt:message bundle="${example_Labels}" key="example_field"/></bean:define>

然后:

title="<%=example_title%>"

我不确定等效的 JSTL(或者甚至应该是 JSTL)标签应该是什么才能取消 Struts 标签,有人可以提供建议吗?我尝试过使用 JSTL setjsp:useBean,但要么它们是错误的方式,要么我没有正确实施它们。

感谢您的任何建议!

【问题讨论】:

    标签: jsp spring-mvc struts jstl javabeans


    【解决方案1】:

    使用fmt:messagevar 属性。

    <fmt:message bundle="${example_Labels}" key="example_field" var="example_title" />
    

    这基本上将与键关联的值导出到名为example_title 的页面范围变量中。您可以稍后在页面中以通常的 EL 方式打印它:

    title="${example_title}"
    

    或者,如果您仍处于不支持模板文本中的 EL 的 pre-JSP-2.0(考虑升级..),则使用 &lt;c:out&gt; 显示它:

    title="<c:out value="${example_title}" />"
    

    【讨论】:

    • 我尝试过这种方式:测试时我没有收到任何 JSP 错误,但页面呈现时标题的值为空白。几乎就像 var="example_title" 没有被识别。该项目是 pre-JSP-2.0,因为它将“${example_title}”作为文字字符串值并将其用作标题。
    • 那么它可能不在同一个范围内。您是否在包含页面 (jsp:include) 中显示它?如果是这样,请将scope="request" 添加到fmt:message。包含页面使用相同的请求。
    • 好主意,但它在同一页面内。以防万一我尝试使用 scope = page/request/session/application 获得相同的结果。 title= 部分位于 标记内会有所不同吗?所以我尝试了:
    • 你应该改用&lt;display:column title="${example_title}"&gt;
    • 我将其指定为正确答案。事实证明 标记在使用 ${example_title} 或 "> 呈现输出时存在一些问题,否则这确实可以正常工作。如果我可以找到解决 标记问题的方法,我将在此处发布给其他人。感谢您的输入!
    【解决方案2】:

    您可以使用 ${} 表示法访问您定义的 bean

    <%
      title = ${example_title}
    %>
    

    如果要打印,可以使用&lt;c:out&gt;标签

    <c:out value=${example_title}/>
    

    Here's JSTL 的快速链接

    【讨论】:

    • EL 在 scriptlet 中不起作用,而您忘记了 c:out 中的引号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多