2

インターフェイスとしてadfを使用しています。3つのコンボボックスで値を取得する際に問題があり、常にnull値が返されます。私は3つのコンボボックスを持っています。最初のコンボボックスには国が含まれており、ユーザーが最初のコンボボックスで値を選択すると(valuechangelistenerを使用します/これはonlickと同義だと思います)、2番目のコンボボックスはユーザーが選択した国の都市によって入力されます(部分トリガーを使用します) 2 番目のコンボボックスを更新し、1 番目のコンボボックスを autosubmit true に設定しました)、ユーザーが 2 番目のコンボボックス (または都市) で値を選択すると、3 番目のコンボボックスは、ユーザーが選択した都市の通りによって設定されます。ただし、2番目のコンボボックストリガーのvaluechangelistenerがnull値を取得するたびに見えるようです。これは adf のバグですか、それともコードにエラーがありますか。

すべてを明確にするために、これは私のjsfページです

<af:selectOneChoice label=" " unselectedLabel="---Select Country---" autoSubmit="true"
                                    valueChangeListener="#{addDistrict.SearchRegion}" id="soc1">
                                        <af:forEach items="#{addDistrict.countries}" var="Country">
                                            <af:selectItem value="#{Country.id}" label="#{Country.countryNm}(#{Country.countryCd})" id="si1"/>
                                        </af:forEach>
                                    </af:selectOneChoice>

2番目のコンボボックス(都市)

<af:selectOneChoice label=" " id="soc2" partialTriggers="soc1"
                                     valueChangeListener="#{addDistrict.SearchCity}" autoSubmit="true">
                                        <af:forEach items="#{addDistrict.regions}" var="Region">
                                            <af:selectItem value="#{Region.id}" label="#{Region.regionNm}(#{Region.regionCd})" id="si2"/>
                                        </af:forEach>
                                    </af:selectOneChoice>

3番目のコンボボックス(ストリート)

<af:selectOneChoice label=" " id="soc3" partialTriggers="soc2" autoSubmit="true">
                                        <af:forEach items="#{addDistrict.cities}" var="City">
                                            <af:selectItem value="#{City.id}" label="#{City.cityNm}(#{City.cityCd})" id="si3"/>
                                        </af:forEach>
                                    </af:selectOneChoice>

valuechangelistener を使用して 2bd コンボボックスの選択した項目の値を取得する方法はありますか? 3 番目のコンボボックスをクエリして入力するには、2 番目のコンボボックスの値が必要です。

豆は。これを @postconstruct に配置して、ページが読み込まれるとコンボボックスに入力します。

        calState = (OracleCallableStatement)con.prepareCall("{ call select_all_country(?) }");
    calState.registerOutParameter(1, OracleTypes.CURSOR);
    calState.execute();
    rs = (ResultSet)calState.getObject(1);
    while(rs.next()){
        countries.add(new GetCountry(rs.getInt(1), rs.getString(2), rs.getString(3)));
    }
    calState.close();

そして valuechangelistener メソッド

    public void SearchRegion(ValueChangeEvent e)throws SQLException, ClassNotFoundException{
    Connect conn = new Connect();
    con = conn.getConnection();
    calState = (OracleCallableStatement)con.prepareCall("{ call select_all_region(?, ?) }");
    calState.setObject(1, e.getNewValue());
    calState.registerOutParameter(2, OracleTypes.CURSOR);
    calState.execute();
    rs = (ResultSet)calState.getObject(2);
    while(rs.next()){
        regions.add(new GetRegion(rs.getInt(1), rs.getString(2), rs.getString(3)));
    }
    calState.close();
    con = conn.closedConnection();
}

とにかく、単純な jdbc を使用します。休止状態を使用したくありません。JDBC ははるかに高速であり、クエリに時間がかかりません。

4

1 に答える 1

0

このhttp://adf4beginners.blogspot.be/2012/11/cascading-select-one-choice-using-bean.htmlを読んでください。あなたのユースケースに合っていると思います。

于 2012-12-19T10:21:28.777 に答える