gpt4 book ai didi

jsf - #{...} 不允许出现在模板文本中

转载 作者:行者123 更新时间:2023-12-04 02:08:00 25 4
gpt4 key购买 nike

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

当我们使用这段代码时,服务器抛出一个异常消息
#{...} is not allowed in template text

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

最佳答案

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

<p>#{bean.property}</p>
JSP 不支持它,但它的后续 Facelets 支持它。在 JSP 中,您需要明确使用 <h:outputText> :
<p><h:outputText value="#{bean.property}"></p>
但是,在您使用的特定代码片段中 #{...}已经在 J​​SF 组件中,只有在 a4j 时才会发生这种情况。标签库没有被 <%@ taglib %> 正确注册为 JSP 标签库,或者如果 a4j在类路径中找不到标记库。这样 <a4j:ajax>标签不被解析,因此被视为纯文本,包括所有带有 EL 表达式的属性。所以 #{question.setParameters}在模板文本中被视为 EL,这在 JSP 中不受支持。
但是你的问题更大:RichFaces 4.x 组件库,其中 <a4j:ajax>是, 的一部分不支持 JSP . JSP 自 JSF 2.0 起就被弃用,而由 Facelets 取而代之。所有 JSF 组件库(如 RichFaces)都决定放弃对 JSP 的支持,因为为两种不同的 View 技术 JSP 和 Facelets 开发和支持标记库和组件是一项艰巨的工作。因此,即使您的类路径中已经有 RichFaces 4.x 并且您已经通过 <%@ taglib %> 正确注册了它,它永远不会在 JSP 中工作,仅仅因为 JSP .tld a4j 的文件不存在命名空间。
为了使用 JSF 2.0 兼容的组件库,您必须从 JSP 迁移到 Facelets。另一种方法是改用较旧的 RichFaces 3.x 版本。 3.3.3 版支持 JSP 上的 JSF 2.0。它提供 <a4j:support>标签来实现相同的。但请记住,您正在以这种方式在技术上倒退。你应该继续前进。放弃 JSP 并选择它的继任者 Facelets。
另见:
  • Migrating from JSF 1.2 to JSF 2.0
  • Our Facelets wiki page - 底部包含几个教程链接
  • 关于jsf - #{...} 不允许出现在模板文本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12478640/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com