2011-05-09 8 views
0

ドロップダウンの値の変更に基づいてJSFでValueChangeListenerを呼び出すと、そのページにあるすべてのValueChangeListnerが呼び出されます。ValueChangeListenerの問題

DataTableには2つのvalueChangeListenerがあり、1つのドロップダウンで値を変更し、2番目の値も変更します。

<t:column id="avlId" styleClass="coltextcenteralign"> 
      <f:facet name="header"> 
       <h:panelGroup> 
        <h:outputText value="#{bundle['travelLocalAccommodation.title.availability']}" /> 
        <h:outputText value="*" style="color:red" /> 
       </h:panelGroup> 
      </f:facet> 
      <t:selectOneMenu value="#{accomDtls.availability}" immediate="true" 
       valueChangeListener="#{TravelProcessingBB.localAccommodationBB.setAvailableFlag}" forceid="true" id="avl" 
       onchange="return availabilityAlert('#{accomDtls.prepopulatedFlag}','avl[#{table_count}]')" 
       styleClass="dropDownStyle" style="width:50"> 
       <f:selectItem itemValue="Y" itemLabel="Yes" /> 
       <f:selectItem itemValue="N" itemLabel="No" /> 
      </t:selectOneMenu> 
     </t:column> 


+0

関連するコードを追加できますか? –

答えて

1

値の変更だけでは、valueChangeListenerは自動的に呼び出されません。フォームを提出する必要があります。一般的に使用される「ハック」は、にonchangeイベント中にJavaScriptを使用して呼び出すことです。ただし、フォームを提出してください。実際にはvalueChangeListenerがフォームの変更されたすべてのフィールドに対してトリガーされます。

これをJSF 1.xで修正するには、immediate属性を使用して、他のすべてのフォームコンポーネントをスキップしてコンポーネントbindingをスキップし、他のコンポーネントの値を適切に取得/設定できるようにする必要があります。短い話をすると、私はそれについての記事を書いた:populate child menus in JSF 1.2

JSF 2.0では、これは<f:ajax>タグの助けを借りて実現するのが簡単です。 JSF 2.0を実際に使用している場合(現在の質問にはそのことが示されていません)、例が必要な場合は教えてください。

関連する問題