【问题标题】:The deferred EL expression is not allowed since deferredSyntaxAllowedAsLiteral is false由于 deferredSyntaxAllowedAsLiteral 为 false,因此不允许使用延迟的 EL 表达式
【发布时间】:2014-02-18 15:17:29
【问题描述】:

我正在尝试从 JSF 1.2 到 JSF 2.0 的应用程序。基本上,我遵循这些指南:

在收到大量预期错误后,我收到了这个意外错误消息(更改名称以保护有罪者):

weblogic.servlet.jsp.CompilationException: Failed to compile JSP /mypage.jsp
mypage.jsp:10:36: The deferred EL expression is not allowed since deferredSyntaxAllowedAsLiteral is false.
            <ui:param name="pageTitle" value="#{myBundle.myPageTitle}" />
                                              ^---------------------^

这个错误是否意味着我已经退回到 JSP 表示技术?

【问题讨论】:

  • JSF 2 不支持 jsp。尝试重命名 mypage.xhtml 中的文件。

标签: jsp jsf jsf-2 facelets jsf-1.2


【解决方案1】:

您在 JSP 文件而不是 Facelets (XHTML) 文件中编写 Facelets 特定标签 &lt;ui:xxx&gt;

这确实行不通。这段代码基本上被解释为纯文本,就好像你在写纯 HTML/XML。如果你使用例如,你会得到完全相同的错误

<p>#{myBundle.myPageTitle}</p>

换句话说,EL 表达式被解释为“模板文本”的一部分,并且模板文本中不支持 JSP 中的延迟 EL 形式 #{},模板文本中仅支持直接 EL 形式 ${} .

解决方案相当简单:将mypage.jsp 重命名为mypage.xhtml,并且不要忘记用Facelets/XHTML 替换所有其他特定于JSP 的标签,例如&lt;%@...%&gt;&lt;jsp:xxx&gt;

另见:

【讨论】:

  • 我永远不会想到文件名是错误的。无论如何:.jsp 即使使用 Facelets 1.x 也是错误的,不是吗?
  • 确实如此。 .jsp 是一个特殊的文件扩展名,它被服务器的 JSP/Servlet 容器识别并在将请求进一步传递给 JSF 之前进行处理。
猜你喜欢
  • 2013-02-01
  • 2022-06-26
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 2015-02-05
  • 2014-02-22
相关资源
最近更新 更多