1

<rich:popupPanel>タグがあり、その中で<f:ajax>イベントを使用しています。したがって、 に<rich:popupMenu><h:from>内部が必要です。私のajaxイベントでは、「メインページ」から値を取得する必要があるため、対応する :formid:elementid パターンを使用して実行リストにリストしますが、これは機能しません-値はリスナーメソッドでnullです。コードは次のとおりです。

    <h:form id="form">
        ...
        <h:selectOneMenu  id="selectUser" value="#{usersBean.user_id}" styleClass="comboBoxes" >
            <f:selectItems value="#{usersBean.myModelUsersValues}" />   
            <a4j:ajax event="valueChange" listener="#{usersBean.userSelected}" render="login password customer_name" execute="@this"/>      
        </h:selectOneMenu >
        ...
    </h:form>
    <rich:popupPanel id="popup" modal="true" autosized="true" resizeable="false">

    <f:facet name="header">
        <h:outputText value="Atributes" />
    </f:facet>
    <f:facet name="controls">
        <h:outputLink value="#" onclick="#{rich:component('popup')}.hide(); return false;">
            X
        </h:outputLink>
    </f:facet>
    <h:form id="popupForm">
            ...
            <h:selectOneListbox  id="atrib_list" value="#{usersBean.atribSelect}" styleClass="comboBoxes" style="height:100px;width:100px;">
                        <f:selectItems value="#{usersBean.atribValues}" />  
                        <f:ajax event="valueChange" listener="#{usersBean.atribValuesChanged}" render="child_list" execute="@this :form:selectUser"/>                           
            </h:selectOneListbox > 
            ...
    </h:form>
    </rich:popupPanel> 

usersBean.atribValuesChangedリスナー メソッドでは、フィールドusersBean.user_idは空です (選択された値がありません)。form:selectUser 要素を強制的に実行して、リスナー メソッドで選択された値を読み取れるようにするにはどうすればよいですか?

パート2:

これはちょっとしたことです。質問、これについては別のスレッドを開く必要があるかもしれません。問題は、 の<h:selectOneListBox>値が 1 つしかない場合、 のように作成されることですh:selectOneMenu。これは見栄えが悪く、valueChange選択してもイベントは発生しません。この問題は<h:selectManyListBox>バグですか? それは修正可能ですか?

4

1 に答える 1

2

これは予想される動作です。実際には、フォームの外にデータを送信することはできません。

フォームの外側で JSF コンポーネントを再レンダリングすることはできますが (この記事を参照)、フォームの外側にあるものをサーバーに送信することはできません。

したがって、h:inputHidden送信したいフォーム内にを配置h:selectOneMenuし、最初のフォームから再レンダリングしてから、フォームidUserHidden上で を送信することをお勧めします。

<h:form id="form">
    ...
    <h:selectOneMenu  id="selectUser" value="#{usersBean.user_id}"
      styleClass="comboBoxes" >
        <f:selectItems value="#{usersBean.myModelUsersValues}" />   
            <!-- rerender the hidden input also: -->
            <a4j:ajax event="valueChange" listener="#{usersBean.userSelected}"
          render="login password customer_name :idUserHidden" execute="@this"/>      
    </h:selectOneMenu >
    ...
</h:form>
....
<h:form>
    ....
    <!-- hidden input to submit the same value of :selectUser -->
    <h:inputHidden id="idUserHidden" value="#{usersBean.user_id}" />

    <h:selectOneListbox  id="atrib_list" value="#{usersBean.atribSelect}"
       styleClass="comboBoxes" style="height:100px;width:100px;">
        <f:selectItems value="#{usersBean.atribValues}" />  
        <f:ajax event="valueChange" listener="#{usersBean.atribValuesChanged}"
          render="child_list" execute="@this idUserHidden"/>                           
        </h:selectOneListbox > 
</h:form>
于 2012-07-05T12:00:21.520 に答える