13
<a4j:ajax event="click" render="tempval" listener="#{question.setParameters}" />

当我们使用此代码时,服务器会抛出异常并显示消息

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

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

4

4 回答 4

12

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

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

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

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

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

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

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

也可以看看:

于 2012-09-18T14:19:30.743 回答
1

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

于 2016-03-28T03:33:20.900 回答
0

如果您使用 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>
于 2018-09-12T10:28:23.690 回答
0

只需从 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"%>

它肯定会解决你的问题。

于 2021-05-05T10:11:27.390 回答