1

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

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

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

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

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

4

1 回答 1

3

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

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

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

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

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

或者直接在<h:commandLink>.

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

或至少将值放入您加载<f:loadBundle>或注册的 i18n 资源包<resource-bundle>faces-config.xml

<h:commandLink value="#{text['myTitle']}" action="coolAction" />
于 2012-04-24T22:13:39.287 回答