我正在尝试做类似的事情(在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块?谢谢!
答案 0 :(得分:2)
您需要将它们放在至少请求范围内。 EL解决了HttpServletRequest
,HttpSession
和ServletContext
的属性。
<%
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" />