它加載stateList很好,但是當我改變狀態的值時,它調用backbean,但是addressBO爲空。 我該如何解決它?任何其他方式來做到這一點?f:ValueChangeListener無效EJB注入
在此先感謝。
<h:selectOneMenu id="stateList" value="#{newUserController.address.stateID}">
<f:selectItems value="#{addressController.stateList}" />
<f:valueChangeListener type="controller.address.AddressController"/>
<f:ajax event="change" render="cidadeList"/>
</h:selectOneMenu>
<h:selectOneMenu id="cityList" value="#{newUserController.address.cityID}">
<f:selectItems value="#{addressController.cityList}" />
</h:selectOneMenu>
BackBean
package controller.address;
@ManagedBean
@RequestScoped
public class AddressController implements ValueChangeListener {
@EJB
private AddressBO addressBO;
@PostConstruct
public void firstThingToDo() {
stateList = enderecoBO.loadStateListSelectItem();
}
@Override
public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {
String state = (String) event.getNewValue();
cityList = addressBO.loadCityList(state);
}
}
這集的未在這種情況下出現的地址和用戶價值的其他backbean。
package controller.user;
@ManagedBean
@RequestScoped
public class NewUserController {
private Address address;
private User user;
@EJB
private NewUserBO newUserBO;
public void registerNewUser() {
newUserBO.register(user, address);
}
public Address getAddress() {
return this.address;
}
public void setAddress(Address address) {
this.address = address;
}
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
}
您的視圖代碼不符合您的Bean代碼,因此你的問題/問題是非常混亂。請修正它(PS:請儘量在代碼中使用英文,不僅在這裏,而且在您的真實代碼中,這會極大地提高您的英語水平,並且非常有利於我們,SO-pedians和您的未來代碼維護人員)。到目前爲止,我只能說:你根本不需要'ValueChangeListener'。你對舊價值不感興趣。 – BalusC
城市列表將根據州的價值加載。我已經知道英語了,但仍然有寫我想要的東西的一些問題。技術英語對我來說並不容易。我們仍然在考慮將代碼翻譯成英文,但只有巴西人編碼。當我們有時間時,我們會將其改進爲英語。現在沒有時間了:( – pringlesinn
我不需要舊值,但是,如果不是'ValueChangeListener',我該怎麼做呢? – pringlesinn