0

Primefaces 3.2 でカスケード ドロップダウンを使用したいのですが、機能しません。以下は私のxhtmlコードです:

<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> 

ビーンコード:

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: beans.watchBean@2e1b13.wow(javax.faces.event.AjaxBehaviorEvent)

PrimeFaces <p:selectOneMenu> から valueChangeListener を呼び出すにはどうすればよいですか? を参照しました。コードからリスナーを削除し、最初のドロップダウンの値属性のみを保持しましたが、それでも機能しません。エラーは発生せず、2番目のドロップダウンは動的に入力されません。このエラーの原因は何ですか?どうすれば解決できますか?

4

1 に答える 1

0

1) メソッド wow() からパラメーターを削除します。ajax リスナーはパラメーターを取りません。メソッドが実行されると、属性「交換」に新しい値が含まれます。
2) selectOneMenus は h:form で囲む必要があります
。 3) 2 番目の 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> 
于 2012-05-28T13:24:03.943 に答える