0

ログインの詳細に基づいてデフォルト値がロードされた2つのoneSelectMenuがあり、2番目のselectonemenuは最初のselectonemenuのonchangeEventメニューに基づいて値をロードする必要があります.onchangeイベントの前にデフォルト値をクリアしようとしましたが、値は残り、onchangeイベントでは機能しません。

<h:selectOneMenu id="blS" value="#{BoardAction.serviceAreaId}" >
<f:ajax event="valueChange" render="blSearchFacilityInput" listener="#{BoardAction.svaValueChangeEvent}"/> 
 <f:selectItems value="#{BoardAction.serviceAreaList}" var="c"  itemLabel="#{c.svaCode}" itemValue="#{c.id}"/> </h:selectOneMenu>

 <h:selectOneMenu id="blSearchFacilityInput" value="#{BoardAction.facilityId}">                                                         <f:ajax event="valueChange" render="blSearchSectorInput" listener="#{BoardAction.facValueChangeEvent}"/> 
<f:selectItems value="#{BoardAction.svaFaciltyList}" var="c" itemLabel="#{c.facCode}" itemValue="#{c.id}"/></h:selectOneMenu>

ActionBean:

private List<FacilityEBean> svaFaciltyList=null;

public List<FacilityEBean> getSvaFaciltyList() {
svaFaciltyList = facilityBusServ.getFacilityListBySVAId(session.getLoginUser());
return svaFaciltyList;
    }

public List<FacilityEBean> svaValueChangeEvent(){
        if(svaFaciltyList!=null){
            svaFaciltyList.clear();
            svaFaciltyList=null;
        }

  svaFaciltyList = facilityBusServ.getFacilityList(Integer.parseInt(serviceAreaId));
  return svaFaciltyList;

    }
4

1 に答える 1

1

コードロジックフローが間違っています。入力コンポーネントが何らかの方法でプロパティに直接バインドされ、ajaxアクションリスナーメソッドが(変更された)プロパティ値を返すことができることを期待しているようです。したがって、これは実際には真実ではありません。

たとえば、EL式#{BoardAction.serviceAreaList}は、実際にはプロパティのgetterメソッドを呼び出します。あなたの特定のケースでは、getterメソッドは毎回DBからの結果でリストを埋めます。したがって、ajaxリスナーメソッドで設定しているものはすべて、getterメソッドのビジネスロジックによって毎回オーバーライドされます。

これらのゲッターメソッドには、ビジネスロジックをまったく含めないでください。次のようにコードを書き直す必要があります。

private List<FacilityEBean> svaFaciltyList;

@PostConstruct
public void init() {
    svaFaciltyList = facilityBusServ.getFacilityListBySVAId(session.getLoginUser());
}

public void svaValueChangeEvent() {
    svaFaciltyList = facilityBusServ.getFacilityList(Integer.parseInt(serviceAreaId));
}

public List<FacilityEBean> getSvaFaciltyList() {
    return svaFaciltyList;
}
于 2012-09-01T21:18:48.803 に答える