【问题标题】:#{...} is not allowed in template text#{...} 不允许出现在模板文本中
【发布时间】:2013-05-25 22:17:26
【问题描述】:
<a4j:ajax event="click" render="tempval" listener="#{question.setParameters}" />

当我们使用这段代码时,服务器会抛出一个带有消息的异常

#{...} is not allowed in template text

这是怎么引起的,我该如何解决?

【问题讨论】:

  • 尝试使用 ${} 而不是 #{}

标签: jsf ajax4jsf


【解决方案1】:

当您使用 JSP 作为视图技术并且在模板文本中使用 #{...} 时,您将收到此错误,例如(&lt;p&gt; 只是示例,它可以是任何纯 HTML 元素):

<p>#{bean.property}</p>

JSP 不支持它,但它的后续 Facelets 支持它。在 JSP 中,您需要显式使用 &lt;h:outputText&gt;:

<p><h:outputText value="#{bean.property}"></p>

但是,在您的特定代码 sn-p 中,您已经在 J​​SF 组件中使用了 #{...},只有在 @987654330 未将 a4j 标记库正确注册为 JSP 标记库时才会发生这种情况@,或者如果在类路径中找不到 a4j 标记库。这样&lt;a4j:ajax&gt; 标签就不会被解析,因此被视为纯文本,包括所有带有 EL 表达式的属性。所以#{question.setParameters}在模板文本中被视为EL,JSP不支持。

但您的问题更大:&lt;a4j:ajax&gt; 所属的 RichFaces 4.x 组件库不支持 JSP。 JSP 自 JSF 2.0 起被弃用,并由 Facelets 接替。所有 JSF 组件库(例如 RichFaces)都决定放弃对 JSP 的支持,因为为两种不同的视图技术 JSP 和 Facelets 开发和支持标记库和组件需要大量的工作。因此,即使您已经在类路径中拥有 RichFaces 4.x 并且您已经通过 &lt;%@ taglib %&gt; 正确注册了它,它也永远不会在 JSP 中工作,因为 a4j 命名空间不存在 JSP .tld 文件。

为了使用与 JSF 2.0 兼容的组件库,您必须从 JSP 迁移到 Facelets。另一种方法是改用较旧的 RichFaces 3.x 版本。版本 3.3.3 支持 JSP 上的 JSF 2.0。它提供了&lt;a4j:support&gt; 标签来实现相同的目的。但请记住,您会以这种方式在技术上倒退。你应该继续前进。放弃 JSP 并选择它的继任者 Facelets。

另见:

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,对我来说,错误的原因是 javascript 中的注释行,它使用 #{...} 为我页面中的字段分配值。 一旦我删除它就可以正常工作,听起来很奇怪,但这就是发生的事情。

    【讨论】:

    • 这也是我的情况 - 尽管我不想删除 HTML 注释掉的行 - 所以例如而不是删除
    【解决方案3】:

    如果您使用jsp作为视图技术,则需要导入以下两个库。

    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    

    如果您使用 xhtml,请在 html 标签中添加以下内容,例如

    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:c="http://java.sun.com/jsp/jstl/core">
    ...
    </html>
    

    【讨论】:

    • 对不起,这不是一个正确的答案。您导入的命名空间与 OP 的错误没有任何关系。
    【解决方案4】:

    只需从 jsp 页面中删除 Xmlns

    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">
    

    现在为jsp页面添加标签库..

    <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    

    绝对能解决你的问题。

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多