我正试图在书中提出一个问题。
提交人提到:
有时,JSTL <c:set>
标记可以解决JSF <f:param>
标记无法解决的问题。您可能知道我们可以使用<ui:include>
标记将参数传递到<f:param>
标记,如下面的代码所示:
<ui:include src="rafa.xhtml">
<f:param name="rafa" value="Rafael Nadal Page"/>,
</ui:include>
嗯,这种方法引发了一个问题!现在,Rafael Nadal Page值将通过EL #{rafa}
在包含的页面中提供,但在包含页面的托管bean的构造函数中不可用!
现在是<c:set>
标签保存情况的时候了;因此,代码将更改为以下内容:
<ui:include src="rafa.xhtml">
<c:set var="rafa" value="Rafael Nadal Page" scope="request"/>,
</ui:include>
当我使用<c:set>
时,它与#{rafa}
的可用性完美契合,
而在<f:param>
的情况下,它给我一个这样的例外:
而作者提到通过EL #{rafa}
可以在包含的页面中获得该值。我不是在讨论bean的constructor
中的值,而是讨论包含的页面。究竟是什么意思?
答案 0 :(得分:1)
这只是本书中一个不幸的错字。它应该是<ui:param>
而不是<f:param>
。
<ui:include src="rafa.xhtml">
<ui:param name="rafa" value="Rafael Nadal Page"/>,
</ui:include>
<f:param>
旨在将HTTP请求参数添加到<h:xxxLink>
和<h:xxxButton>
组件的结果中,并在<h:outputFormat>
中参数化消息格式。 <ui:param>
旨在将Facelet上下文参数传递给<ui:include>
,<ui:decorate>
和<ui:define>
。
我已将此事通知了作者。
<c:set>
vs <ui:param>