<a4j:ajax event="click" render="tempval" listener="#{question.setParameters}" />
Run Code Online (Sandbox Code Playgroud)
当我们使用此代码时,服务器会抛出该消息的异常
#{...} is not allowed in template text
Run Code Online (Sandbox Code Playgroud)
这是怎么造成的,我该如何解决?
Bal*_*usC 11
当您使用JSP作为视图技术并且您正在使用#{...}
模板文本(例如,<p>
只是示例性的,它可以是任何纯HTML元素)时,您将收到此错误:
<p>#{bean.property}</p>
Run Code Online (Sandbox Code Playgroud)
它在JSP中不受支持,但它的后继Facelets支持它.在JSP中,您需要明确使用<h:outputText>
:
<p><h:outputText value="#{bean.property}"></p>
Run Code Online (Sandbox Code Playgroud)
但是,在您已经#{...}
在JSF组件中使用的特定代码段中,只有在a4j
标记库未正确注册为JSP标记库<%@ taglib %>
或者a4j
在类路径中找不到标记库时才会发生这种情况.这样,<a4j:ajax>
标记不会被解析,因此被视为纯文本,包括具有EL表达式的所有属性.因此#{question.setParameters}
在模板文本中将其视为EL,这在JSP中不受支持.
但是你的问题更大:RichFaces 4.x组件库<a4j:ajax>
是其中的一部分,它不支持JSP.自JSF 2.0以来,JSP已被弃用,并由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.
归档时间: |
|
查看次数: |
21733 次 |
最近记录: |