2012-05-29 53 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答案已更新。 –