【问题标题】:Accessing JSP variables from JSF EL从 JSF EL 访问 JSP 变量
【发布时间】:2012-05-05 14:38:20
【问题描述】:

我正在尝试做类似的事情(在 JSP 页面中,使用 JavaServer Faces 运行):

<%
String myTitle = "Cool Action!";
String myAction = "coolAction";
%>

<h:commandLink value="#{myTitle}" action="#{myAction}" />

这不起作用,因为 JSF 看不到 JSP 变量(至少使用这种表示法?)。

有没有办法从 JSF 标记访问 JSP 变量(不使用会话/页面范围的 bean),或者有没有办法从 JSP 块中定义 JSF 标记,如 commandLink?谢谢!

【问题讨论】:

    标签: jsp jsf el


    【解决方案1】:

    您至少需要将它们放在请求范围内。 EL 解析HttpServletRequestHttpSessionServletContext 的属性等。

    <%
    request.setAttribute("myTitle", "Cool Action!");
    request.setAttribute("myAction", "coolAction");
    %>
    

    但这完全是错误的使用 JSF 的方式。要遵循正确的 MVC 设计理念,您应该以任何方式使用老式 JSP scriptlet。更重要的是,JSP 的后续 Facelets 不支持任何形式的 scriptlet

    根据具体的功能要求,您可以创建一个支持 bean 类,在其中将它们指定为 bean 属性,

    <h:commandLink value="#{bean.myTitle}" action="#{bean.myAction}" />
    

    或者直接在&lt;h:commandLink&gt;中“硬编码”它。

    <h:commandLink value="Cool Action!" action="coolAction" />
    

    或至少将值放入您通过&lt;f:loadBundle&gt; 加载或通过&lt;resource-bundle&gt;faces-config.xml 中注册的 i18n 资源包中:

    <h:commandLink value="#{text['myTitle']}" action="coolAction" />
    

    【讨论】: