2012-05-29 52 views
1

我有我的xhtml頁面上的級聯下拉和它的工作正常,但是當我從孩子或級聯下拉的第二個下拉列表中選擇一個值後單擊命令按鈕,我得到以下錯誤:primefaces命令按鈕操作不工作級聯下拉

sourceId=frm:sym[severity=(ERROR 2), summary=(frm:sym: Validation Error: Value is not valid), detail=(frm:sym: Validation Error: Value is not valid)] 

XHTML代碼:

<h:form id="frm"> 
    <p:selectOneMenu style="width: 150px" value="#{watchBean.exchange}"> 
      <f:selectItem itemLabel="NSE" itemValue="nse"/> 
      <f:selectItem itemLabel="BSE" itemValue="bse"/> 
      <p:ajax update="sym" listener="#{watchBean.wow}" /> 
     </p:selectOneMenu> 
    <p:selectOneMenu style="width: 150px" id="sym" value="#{watchBean.scripSym}"> 
     <f:selectItem itemLabel="select scrip" /> 
     <f:selectItems var="scrip" value="#{watchBean.sl}" itemLabel="#{scrip.scripSymbol}" itemValue="#{scrip.scripSymbol}"/> 
    </p:selectOneMenu> 

    <p:commandButton label="add to watch" value="add to watch" id="btnAdd" action="#{watchBean.addUserTrack()}" ajax="false"/>    
    <p:dataTable id="dt" var="track" .....> 

豆代碼:

@javax.faces.bean.ManagedBean 
@javax.faces.bean.RequestScoped 
public class watchBean { 
    @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/StatelessWebService/StatelessWebService.wsdl") 
    private StatelessWebService_Service service; 

    /** Creates a new instance of watchBean */ 
    public watchBean() { 
    } 
    String uname,scripSym,exchange; 
    Integer scripID; 
    List<UserTrack> ut; 
List<MasterScrip> sl; 
    public List<MasterScrip> getSl() { 
     return sl; 
    } 

    public void setSl(List<MasterScrip> sl) { 
     this.sl = sl; 
    } 

    public String getExchange() { 

     return exchange; 
    } 

    public void setExchange(String exchange) { 
     sl=getAllScripByExchange(exchange); 
     setSl(sl); 
     this.exchange = exchange; 
    } 

    public void wow() { 
     //sl=getAllScripByExchange((String)e.getNewValue()); 
     // setSl(sl); 
     //FacesContext.getCurrentInstance().renderResponse(); 
     sl=getAllScripByExchange(exchange); 
    } 

    public List<UserTrack> getUt() { 
     HttpServletRequest req=(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
     HttpSession session=req.getSession(); 
     this.uname=(String)session.getAttribute("uname"); 
     ut=getAllUserTrack(uname); 
     return ut; 
    } 

    //getter setter 
    public void addUserTrack() { 
     HttpServletRequest req=(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
     HttpSession session=req.getSession(); 
     this.uname=(String)session.getAttribute("uname"); 
     MasterScrip sm=getScripBySymbol(scripSym); 
     scripID=sm.getScripID(); 
     addUserTrack(uname, scripID); 
    } 
} 

什麼可能導致此問題?我如何解決它?

回答

2

將您的bean從RequestScoped更改爲ViewScoped,這樣在視圖存在時將保留視圖上的更改。

編輯:

從您的評論,你忘了處理您的清單後更新的數據表。更改此

<p:commandButton label="add to watch" value="add to watch" id="btnAdd" action="#{watchBean.addUserTrack()}" ajax="false"/> 

添加update句子;

<p:commandButton label="add to watch" value="add to watch" id="btnAdd" action="#{watchBean.addUserTrack()}" ajax="false" update="dt"/> 
+0

良好的捕捉,完全錯過範圍+1 – mprabhat

+0

現在工作,但數據表不刷新。可能是什麼原因? – z22

+0

@ z22答案已更新。 –