在 JSF/JSP EL 和 Javascript 中连接字符串[重复]

2024-05-02

我在使用 EL 和 javascript 函数(JSF 1.2、Facelets、Richfaces 3.3.0GA)时遇到问题。我有一个页面包含另一个组合:

<ui:include src="/pages/panels/examinationPanel.xhtml">
<ui:param name="prefix" value="new" />

而在我的ui:composition我想附加prefix到每一个id。例如:

<rich:modalPanel id="#{prefix}_examinationPanel">

这样就可以了。

但是当我想访问诸如以下函数中的组件时,问题就来了oncomplete我无法让它正确连接字符串。例如

oncomplete="#{rich:component('#{prefix}_examinationPanel')}.show();"

我尝试过fn:join也一样,但它不会执行该函数,因为当它找到“#”字符时它会抱怨错误。例如:

 oncomplete="#{rich:component(fn:join(#{prefix},'examinationPanel'))}.show()"

throws

SEVERE: Servlet.service() for servlet Faces Servlet threw exception org.apache.el.parser.ParseException: Encountered "fn:join( #" at line 1, column 33.

Encountered "fn:join( #"

如果我用方括号或#和方括号括起来,则会出现不同的错误。

我究竟做错了什么?

还有另一个问题,在条件命令中,例如

oncomplete="#{a}?#{b}:#{c}"

当 true 或 false 时,我如何“分组”以便能够执行更多操作?例如这样的事情:

oncomplete="#{a}?(#{b}#{f}):(#{c}#{d}#{e})"

我尝试过使用括号,但无法正确解析它。

提前致谢。


假设您正在使用 Facelets,这里有一个相对较好的解决方案:

  • create functions.taglib.xml在你的 WEB-INF 中
  • 添加指示位置的上下文参数:

    <context-param>
        <param-name>facelets.LIBRARIES</param-name>
        <param-value>
            /WEB-INF/functions.taglib.xml
        </param-value>
    </context-param>
    
  • 在 xml 中添加以下内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE facelet-taglib PUBLIC
      "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
      "https://facelets.dev.java.net/source/browse/*checkout*/facelets/src/etc/facelet-taglib_1_0.dtd">
    <facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
        <namespace>http://yournamespace.com/fnc</namespace>
        <function>
            <function-name>concat</function-name>
            <function-class>com.yourpackage.utils.Functions</function-class>
            <function-signature>
                java.lang.String concat(java.lang.String, java.lang.String)
            </function-signature>
        </function>
    </facelet-taglib>
    
  • 在页面中使用以下内容:

    xmlns:fnc="http://yournamespace.com/fnc"
    ....
    oncomplete="#{rich:component(fnc:concat(prefix, '_examinationPanel'))}.show();"
    
  • 最后,在Function类定义简单方法:

    public static String concat(String string1, String string2) {
       return string1.concat(string2);
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JSF/JSP EL 和 Javascript 中连接字符串[重复] 的相关文章

随机推荐