2つのSelectOneMenuコントロールの実装に問題があります.2つ目のSelectOneMenuコントロールのデータは、最初の選択に応じて異なります。 primeFacesショーケースのこの例は、実装したいものとほぼ同じです。http://www.primefaces.org/showcase-labs/ui/pprSelect.jsfPrimeface 3.0.M2の問題SelectOneMenu Ajaxの振る舞い
ただし、データベースからデータを取得する必要があります。
上記の例は、同じプロジェクトで正しく動作しています。私はGlassFish 3.1とPrimeFaces 3.0.M2でNetBeans 7.0を使用しています。これは最新のドロップ(2011年6月20日)です。
JSFページのソースコードとマネージドBeanが添付されています。
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head><title>Facelet Title</title></h:head>
<h:body>
<p:log />
<center>
<h:form>
<h:outputText value="State: "/>
<p:selectOneMenu id="selectState" value="#{stateCityBean.selectedStateArray}">
<f:selectItem itemLabel="Select Any" itemValue="Empty String"/>
<p:ajax update="selectCity" listener="#{stateCityBean.updateCityMap}"/>
<f:selectItems value="#{stateCityBean.stateMap}" />
</p:selectOneMenu>
<p></p>
<h:outputText value="City: "/>
<p:selectOneMenu id="selectCity" value="#{stateCityBean.selectedCityArray}">
<f:selectItem itemLabel="Select Any" itemValue="Empty String"/>
<f:selectItems value="#{stateCityBean.cityMap}"/>
</p:selectOneMenu>
</h:form>
</center>
</h:body>
StateCityBean.java
package com.xyz.mbeans;
import com.iwizability.priceinfo.dao.*;
import com.iwizability.priceinfo.pojo.*;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.context.Flash;
import javax.faces.event.ValueChangeEvent;
@ManagedBean
@SessionScoped
public class StateCityBean {
private String selectedStateArray;
private Map<String, State> StateMap;
private Map<String, City> CityMap;
private String selectedCityArray;
public StateCityBean() {
System.out.println("Inside.............. ");
StateMap = new LinkedHashMap<String, State>();
CityMap = new LinkedHashMap<String, City>();
}
public String getSelectedStateArray() {return selectedStateArray;}
public void setSelectedStateArray(String selectedStateArray) {this.selectedStateArray = selectedStateArray;}
public Map<String, State> getStateMap() {
StateDaoImpl stateObj = new StateDaoImpl();
StateMap = stateObj.getState();
return StateMap;
}
public void setStateMap(Map<String, State> stateArray) {this.StateMap = stateArray;}
public String getSelectedCityArray() {return selectedCityArray;}
public void setSelectedCityArray(String selectedCityArray) {this.selectedCityArray = selectedCityArray;}
public Map<String, City> getCityMap() {
CityDaoImpl cityObj = new CityDaoImpl();
int stateId = 0;
if (selectedStateArray != null && !selectedStateArray.equals("")) {
stateId = StateMap.get(selectedStateArray).getId();
}
CityMap = cityObj.getCity(stateId);
return CityMap;
}
public void setCityMap(Map<String, City> CityArray) {
this.CityMap = CityArray;
}
public void updateCityMap() {
CityDaoImpl cityObj = new CityDaoImpl();
int stateId = 0;
if (selectedStateArray != null && !selectedStateArray.equals("")) {
stateId = StateMap.get(selectedStateArray).getId();
this.CityMap = cityObj.getCity(stateId);
}
}
}
デバッグを、IはupdateCityMapメソッドが呼び出されることを確認できなくSelectedStateArray変数がヌルです。バインドされたCityMap変数の値を強制的に変更しても、selectCityドロップダウンは更新されません。
あなたが推測しているだろうと、私はJSFに新しいですが、問題は、私は、タグライブラリの開発バージョンではまだ使用していたという事実によって配合されています...
これは、あなたの問題の一部であってもよいが、あなたの更新の属性があなたの街に直接言及しています'update =" selectCity "'この問題は、JSFでは、デフォルトで ''がそのidを子要素に付加することになります。あなたの ''に次の属性を指定し、問題が修正されているかどうかを確認してください。 'prependId =" false "' –
@maple_shaft:これは私が見たすべての例で更新属性が使われる方法です...試しましたprependIdを無効にしても問題は解決しないようです。 – agileai
したがって、p:ajaxにevent = "valueChange"属性を追加して、エラーが発生しました。j_idt8:selectState:検証エラー:値が無効です 検証エラーを調べると、問題。一般的なJSFとPrimeFacesの具体的な内容: http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=6947 http://www.java.net/blogs/lamine_ba http ://www.coderanch.com/t/501774/JSF/java/JSF-PrimeFace-Validation-Error-Value 私はviewscopedにスコープを変更しようとしましたが、それは私のためにトリックをやっていません... – agileai