从JSF EL访问JSP变量

时间:2012-04-24 22:07:20

标签: jsp jsf el

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

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

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

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

有没有办法从JSF标签访问JSP变量(不使用会话/页面范围的bean),或者有一种方法可以在&lt; %%&gt;内部定义命令链接等JSF标记。 JSP块?谢谢!

1 个答案:

答案 0 :(得分:2)

您需要将它们放在至少请求范围内。 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}" />

或直接在<h:commandLink>中对其进行“硬编码”。

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

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

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