11

ELおよびjavascript関数(JSF 1.2、Facelets、Richfaces 3.3.0GA)で問題が発生しています。別の構成を含むページがあります。

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

そして、私の中では、すべてのIDui:compositionにを追加したいと思います。prefix例えば:

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

それは大丈夫です。

oncompleteしかし、文字列を適切に連結することができないなど、関数内のコンポーネントにアクセスしたい場合に問題が発生します。例えば

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

私も試してみましfn:joinたが、「#」文字が見つかるとエラーが発生するため、関数は実行されません。例えば:

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

スロー

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})"

かっこで試しましたが、正しく解析されません。

前もって感謝します。

4

2 に答える 2

20

Faceletsを使用していると仮定すると、これが比較的良い解決策です。

  • functions.taglib.xmlWEB-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);
    }
    
于 2010-02-03T15:07:15.513 に答える
15

より簡単な解決策は、オブジェクトのように EL で文字列を管理し、次のようにクラス文字列のメソッド concat を使用することです。

#{rich:component('constantString'.concat(variable))}.show();
于 2011-09-09T23:13:37.497 に答える