【问题标题】:PWC6228: #{...} not allowed in a template text bodyPWC6228:模板文本正文中不允许使用 #{...}
【发布时间】:2012-01-03 01:24:30
【问题描述】:

我有一个 JS 脚本,当提交按钮操作成功触发时会调用它:

<h:panelGroup rendered="#{user$webreports$webfilteroverview.submitted}">
    <f:verbatim>
    <script  type="text/javascript">alert('Done!');</script>
    </f:verbatim>
</h:panelGroup>

上面的代码完美运行。我想要做的是从资源包中获取警报框文本:

<script  type="text/javascript">alert('#{msg.report_alert_text}');</script>

但我得到错误:

PWC6228:模板文本正文中不允许使用 #{...}。

我这样做了:

<h:commandbutton onClick="alert('#{msg.report_alert_text}');"/> 

它工作正常。我不明白为什么上面的代码不起作用。是否有可能做到这一点?如果是,上面的代码有什么问题?提前致谢。

【问题讨论】:

    标签: templates jsf jsf-2 el


    【解决方案1】:

    PWC6228:模板文本正文中不允许使用 #{...}。

    您显然使用的是旧版 JSP(X),而不是其后续的 Facelets。 JSP(X) 不支持模板文本中的延迟 EL #{}。它只支持模板文本中的标准EL${}(模板文本表示外部标签/JSF组件):

    <script type="text/javascript">alert('${msg.report_alert_text}');</script>
    

    如果这不起作用,因为 ${msg} 尚未准备好(#{} 将自动创建它,如果它在该视图点尚不存在),那么您需要 &lt;h:outputText&gt; 代替:

    <script type="text/javascript">alert('<h:outputText value="#{msg.report_alert_text}" />');</script>
    

    您只需要删除 &lt;f:verbatim&gt; 标记即可让 JSF 组件在那里运行。 &lt;f:verbatim&gt; 是 JSF 1.0/1.1 的剩余部分,自 JSF 1.2 起不再需要,自 JSF 2.1 起已弃用。

    这个问题与 JavaScript无关。您收到的错误来自网络服务器,而不是来自网络浏览器。

    【讨论】:

    • 我删除了逐字标记。我先尝试了 然后 。但是这两种情况都不起作用..
    • 我也刚刚添加了 JS 标签以获取信息。但是 SO 是按字母顺序列出标签,看起来最重要的标签是 JS,但它只是相关的。
    • 对不起,它没有给出任何警告框。它刚刚创建了新报告。看起来它根本没有到达面板组。
    • 您是否收到任何 JS 错误?打开浏览器的 JS 控制台(或您正在使用的任何 webdeveloper 浏览器插件之一)。您在生成的 HTML 输出中看到了什么?在浏览器中打开页面,右键查看源码。
    • 我无法捕捉到任何 JS 错误。我得到的只是“ GET 192.168.0.165:81/lrms/theme/com/sun/webu...eme4_2-080320/… GET 192.168.0.165:81/lrms/theme/com/sun/webui/jsf/… 200 OK 49ms Error: createWidget has null props bootstrap.js (line 22) Error: createWidget has null props bootstrap.js (line 22)”,我认为这无关紧要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2012-11-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多