【问题标题】:Replacing the <f:param> tag with the JSTL <c:set> tag & the javax.faces.view.facelets.TagException用 JSTL <c:set> 标记和 javax.faces.view.facelets.TagException 替换 <f:param> 标记
【发布时间】:2016-04-21 08:40:42
【问题描述】:

我正在尝试构建书中给出的问题。

作者提到:

有时,JSTL &lt;c:set&gt; 标签可以解决 JSF &lt;f:param&gt; 标签不能解决的问题。大概,你知道我们可以使用&lt;f:param&gt;标签向&lt;ui:include&gt;标签传递参数,如下代码所示:

<ui:include src="rafa.xhtml">
  <f:param name="rafa" value="Rafael Nadal Page"/>,
</ui:include>

好吧,这种方法会引发问题!现在,Rafael Nadal Page 值将通过 EL,#{rafa} 在包含页面中可用,但在包含页面的托管 bean 的构造函数中将不可用!

是时候用&lt;c:set&gt;标签来挽救局面了;因此,代码将更改为:

<ui:include src="rafa.xhtml">
  <c:set var="rafa" value="Rafael Nadal Page" scope="request"/>,
</ui:include>

当我使用&lt;c:set&gt; 时,它的可用性与#{rafa} 一样完美,

&lt;f:param&gt; 的情况下,它给了我一个这样的例外: 而作者提到该值将通过 EL,#{rafa} 在包含的页面中可用。我说的不是bean 的constructor 中的值,而是包含的页面。他到底是什么意思?

【问题讨论】:

  • 真的提到了&lt;f:param&gt;吗?应该是&lt;ui:param&gt;
  • @BalusC:真的是
  • 感谢您在有疑问时提出问题。

标签: jsf jsf-2.2


【解决方案1】:

这只是书中的一个不幸的错字。真的应该是&lt;ui:param&gt; 而不是&lt;f:param&gt;

<ui:include src="rafa.xhtml">
  <ui:param name="rafa" value="Rafael Nadal Page"/>,
</ui:include>

&lt;f:param&gt; 旨在将 HTTP 请求参数添加到 &lt;h:xxxLink&gt;&lt;h:xxxButton&gt; 组件的结果中,并参数化 &lt;h:outputFormat&gt; 中的消息格式。 &lt;ui:param&gt; 旨在将 Facelet 上下文参数传递给 &lt;ui:include&gt;&lt;ui:decorate&gt;&lt;ui:define&gt;

我已经通知了作者。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多