0

これでエラーが発生する理由に答えることができるリソースが見つかりません:

oncomplete="#{MyBacking.oError ? #{rich:component('oErrorPanel')}.show() : return false;}"

リッチフェイスでa4j:commandButton。oError は、isOError という Bean のメソッドを参照しています。

エラーが発生します

SEVERE: Servlet.service() for servlet Faces Servlet threw exception
org.apache.el.parser.ParseException: Encountered " "?" "? "" at line 1, column 30.
Was expecting one of:
    "}" ...
    "." ...
...

「メソッドが true を返す場合、モーダル パネル A を表示し、それ以外の場合は false」と言いたいです。どんな助けでも大歓迎です。

EDIT 次のようにコードを編集しました。

                        <a4j:region id="Cont">
                        <a4j:form name="Form">
                            <h:panelGrid columns="2" style="padding: 2px;">

                                <h:outputText value="Old password&#160;" />
                                <h:inputSecret id="FormOldP" value="#{MyBacking.dbOldPwd}" />

                                <h:outputText value="New password&#160;" />
                                <h:inputSecret id="FormNewP0" value="#{MyBacking.dbNewPwd0}" />

                                <h:outputText value="Re-enter new password&#160;" />
                                <h:inputSecret id="FormNewP1" value="#{MyBacking.dbNewPwd1}" />

                                <h:panelGroup>
                                    <a4j:commandButton value="Submit"
                                        action="#{MyBacking.dbPwdChange}"
                                        data="#{MyBacking.oldDbPwdError}"
                                        oncomplete="if(data == true) { rich:component('OldErrorPanel').show(); }"
                                        image="/img/btnSubmit16.png"
                                        reRender="sysMsg,FormCont" />

                                    <a4j:commandButton value="Cancel"
                                        onclick="#{rich:component('MyPanel')}.hide();return false;" />
                                </h:panelGroup>
                            </h:panelGrid>
                        </a4j:form>
                    </a4j:region>

これは正常にコンパイルされますが、ブール値が true に設定されていても (古い passwd が保存されているものと異なる場合)、パネル MyPanel は画面に残りますが、エラーモーダル OldErrorPanel は表示されません。上記は私には大丈夫に見えます。これはJavaです:

public void setOldDbPwdError(boolean b) {
    logger.info("setting ldDbPwdErro to "+b);
    oldDbPwdError = b;
}

public boolean isOldDbPwdError() {
    logger.info("asking for isOldDbPwdError, returning" +oldDbPwdError);
    return oldDbPwdError;
}

さらにアドバイスをいただければ幸いです。

4

1 に答える 1

3

式が無効です。式の中から別の式を開いています(#{})

有効な場合は、次のようになります。oncomplete = "#{MyBacking.oError?rich:component('oErrorPanel')。show():''}"

ただし、oErrorの値を取得するにはボタン自体を再レンダリングする必要があるため、これで問題が解決されるとは思いません(JSFはすべてページのHTML / Javascriptにレンダリングされることに注意してください)。

私はこのようなdata属性を使用しますcommandButton

<a:commandButton
  id="Bgo"
  action="#{MyBacking.someAction}"
  value="Submit"
  data="#{MyBacking.oError}"
  oncomplete="if(data == true) { rich:component('oErrorPanel').show(); }"/>

特にJavascriptインタラクションに関するRichfacesのマニュアルを読んでください。

更新:更新された質問への回答。ページの他の場所で使用している値を再レンダリングして、値dataを確認してください。例えば:

<h:outputText id="reRenderMe" value="#{MyBacking.oError}"/>
于 2010-05-19T22:02:16.733 に答える