1

2 つのコマンド ボタンと 1 つのメニューを選択します。選択されたボタンとメニューで現在選択されている項目に応じて、Bean メソッドを呼び出す必要があります。

<h:form id="form1">
    <h:outputLabel value="menu:" /> 
    <h:commandButton  value ="en" action="#{bean.exec}" >
        <f:setPropertyActionListener target="#{bean.menu}" value='en' />
    </h:commandButton>
    <h:commandButton value ="fr" action="#{bean.exec}" >
        <f:setPropertyActionListener target="#{bean.menu}" value='fr' />
    </h:commandButton>      

    <h:outputLabel value="id:" />
    <h:selectOneMenu value="#{bean.id}">
        <f:selectItems value="#{bean.idlist}" />
        <f:ajax listener="#{bean.exec}" render ="form1" />
    </h:selectOneMenu>
</h:form>

ただし、最初のボタンはプロパティを更新してアクション メソッドを呼び出しますが、2 番目のボタンは次のメッセージを表示します。

警告: FacesMessage はキューに入れられましたが、表示されていない可能性があります

ビューは最初のクリックでは更新されません。ただし、2 回目のクリックですぐにプロパティが更新され、ビューも更新されます。

これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

0

ログを見ましたが、エラーを理解できません: これが示す内容です: form1:j_idt124: Validation Error: Value is not valid どの値とどこで?

<h:message>次のように、すべての入力コンポーネントに ID を与え、それらに を付けると、値を識別しやすくなります。

<h:outputLabel for="id" value="id:" />
<h:selectOneMenu id="id" value="#{bean.id}">
    <f:selectItems value="#{bean.idlist}" />
    <f:ajax listener="#{bean.exec}" render ="form1" />
</h:selectOneMenu>
<h:message for="id" />

この方法ではform1:id、代わりにラベルとして取得されますform1:j_idt124labelまたは、入力コンポーネントの を指定することもできます。

<h:selectOneMenu label="id" ... />

「値が無効です」というエラーに関しては、フォーム送信の処理中に選択した値が使用可能な値のいずれとも一致しない場合に、このエラーが発生します。#{bean.idlist}これは、フォーム送信の処理中に背後のプロパティが非互換に変更された場合に発生する可能性があります。これは、Bean がリクエスト スコープである場合に発生する可能性があります。Bean をビュー スコープに配置すると、修正されるはずです。

以下も参照してください。

于 2013-02-06T16:49:11.540 に答える