用JSTL <c:set>标签替换<f:param>标签&amp; javax.faces.view.facelets.TagException

时间:2016-04-21 08:40:43

标签: jsf jsf-2.2

我正试图在书中提出一个问题。

提交人提到:

有时,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>的情况下,它给我一个这样的例外: enter image description here 而作者提到通过EL #{rafa}可以在包含的页面中获得该值。我不是在讨论bean的constructor中的值,而是讨论包含的页面。究竟是什么意思?

1 个答案:

答案 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>

我已将此事通知了作者。

另见:

相关问题