我正在使用adf作为我的界面,我在我的3个组合框上获得价值时遇到问题它总是给我空值。我有3个组合框,第一个组合框包含国家,一旦用户在第一个组合框上选择一个值(我使用valuechangelistener /我认为是同义的onlick)第二个combox是由用户所选国家的城市填充的(我使用部分触发器)刷新第二个组合框并且我已经将第一个组合框设置为自动提交为真),并且一旦用户在第二个组合框(或城市)上选择一个值,第三个组合框应该由用户所选城市的街道填充。然而,似乎每次第二个组合框上的valuechangelistener触发它都会得到空值。这是adf错误还是我的代码出错了。
让一切都清楚 这是我的jsf页面 1st combobx(国家)
<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>
第二组合框(城市)
<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组合框的所选项的值?我需要第二个组合框的值来查询并填充第三个组合框。
至于豆子。 我把它放在@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我不想使用hibernate,查询时JDBC速度更快,而且不会耗费时间。
答案 0 :(得分:0)