2012-05-28 32 views
0

我希望在primefaces 3.2中使用級聯下拉,但它不起作用。下面是我的XHTML代碼:在primefaces 3.2級聯下拉不起作用

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

bean代碼:

import java.util.List; 
import javax.annotation.ManagedBean; 
import javax.inject.Named; 
import javax.enterprise.context.RequestScoped; 
import javax.faces.context.FacesContext; 
import javax.faces.event.ValueChangeEvent; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpSession; 
import javax.xml.ws.WebServiceRef; 
import service.MasterScrip; 
import service.StatelessWebService_Service; 

/** 
* 
* @author root 
*/ 
@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(ValueChangeEvent e) 
{  
    sl=getAllScripByExchange((String)e.getNewValue()); 
    // setSl(sl); 
    //FacesContext.getCurrentInstance().renderResponse(); 

    // sl=getAllScripByExchange(exchange); 
} .... 

我得到以下錯誤:

javax.el.MethodNotFoundException: Method not found: [email protected].wow(javax.faces.event.AjaxBehaviorEvent) 

我提到How do I get PrimeFaces <p:selectOneMenu> to call valueChangeListener?並從我的代碼刪除的監聽,只有不停第一個下拉菜單的值屬性,仍然不起作用,那麼它不會產生錯誤,第二個下拉菜單不會動態填充。 我被困在這,這個錯誤的原因是什麼,它如何解決?

回答

0

1)從方法wow()中刪除參數。 ajax監聽器不帶參數;當該方法執行時,屬性「exchange」包含新值。
2)selectOneMenus應該被h包圍:表格
3)第二個selectOneMenu是錯誤的。 selectOneMenu的value屬性應引用組合的選定項目;不是項目清單。 var屬性在f:selectItems標籤中。 f:selectItems標籤缺少value屬性,它引用了項目列表。它應該看起來像這樣:

<p:selectOneMenu style="width: 150px" id="sym" value="#{watchBean.selectedItem}" > 
      <f:selectItems value="#{watchBean.sl}" var="scrip" 
         itemLabel="#{scrip.scripSymbol}" 
         itemValue="#{scrip.scripSymbol}"/> 
</p:selectOneMenu> 
+0

謝謝mate..it工作 – z22

+0

@ z22沒問題! – Damian