0

ドロップダウンリスト項目の選択に基づいてリストを取得したい。そのために、私は動作していない次のコードを使用しています:

<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=":frm" listener="#{watchBean.doScripList}" />
            </p:selectOneMenu> 

ビーンコード:

    public void doScripList(ValueChangeEvent e)
{

    sl=getAllScripByExchange((String)e.getNewValue());  //sl is of type List<MasterScrip>
}

デバッグすると、イベントが発生していないことがわかり、次のエラーが発生します。

javax.el.MethodNotFoundException: Method not found: beans.watchBean@9ac2e4.doScripList(javax.faces.event.AjaxBehaviorEvent)
at com.sun.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:155)...

p:ajax を省略すると、「交換」タイプも取得/設定されません。この問題の原因は何ですか? その解決策は何ですか?

編集 されたメソッドの名前を wow() に変更しても、同じエラーが発生します:

 javax.el.MethodNotFoundException: Method not found: beans.watchBean@1732d83.wow(javax.faces.event.AjaxBehaviorEvent)

編集済み: マネージド Bean コード

 import java.util.List;
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;
@Named(value = "watchBean")
@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);
        this.exchange = exchange;
    }
public void wow(ValueChangeEvent e)
{    
    sl=getAllScripByExchange((String)e.getNewValue());
   // setSl(sl);
    //FacesContext.getCurrentInstance().renderResponse();

    // sl=getAllScripByExchange(exchange);
}
4

3 に答える 3

1

あなたと同じ問題に遭遇しましたが、valueChangeListener

public void doScripList(ValueChangeEvent e)

<f:ajax>を使用する場合ではなく、タグを使用する場合にのみ機能します<p:ajax>。しかし、 selectOneMenu は type<p:selectOneMenu>であるため、機能し<f:ajax>ません。

パラメータを削除して解決しましたが、うまくいきましたValueChangeEvent e<p:ajax>したがって、タグの場合はパラメーターなしのリスナーを試してください。

public void doScripList()
{
    sl=getAllScripByExchange(getExchangeName());
}

注: ここでは event パラメーターがないため、それぞれのセッター メソッドを呼び出して新しい値を設定し、リスナーで更新された値にアクセスできます。この場合、次のように selectOneMenu に id を提供する必要もあります。

<p:selectOneMenu id="exchangeName" style="width: 150px" value="#{watchBean.exchange}">
  ...
</p:selectOneMenu>

次に、Bean クラスに exchangeName の get メソッドと set メソッドを追加します。

private String exchangeName;

public String getExchangeName(){
   return exchangeName;
}

public void setExchangeName(String exchangeName) {
    this.exchangeName = exchangeName;
}
于 2013-01-09T12:44:25.997 に答える
1

変更してみる

<p:ajax event="change" update=":frm" listener="#{watchBean.doScripList}" />

<p:ajax event="change" update=":frm" listener="#{watchBean.doScripList()}" />

メソッドの最後に括弧を追加します。

JSF はバッキング Bean でメソッドを探していsetDoScripListますが、最後に括弧を追加すると、このメソッドがdoScripList明示的に呼び出されます。

于 2012-05-28T06:58:02.480 に答える
0

これは primefaces 3.2 のバグです。コードを次のように置き換えてください。

  <h:selectOneMenu style="width: 150px" value="#{watchBean.exchange}" valueChangeListener="#{watchBean.doScripList}" onchange="submit()">
       <f:selectItem itemLabel="NSE" itemValue="nse"/>
       <f:selectItem itemLabel="BSE" itemValue="bse"/>            
   </h:selectOneMenu> 

ここで好きな方法を変更してください。

  public void doScripList(ValueChangeEvent e){
     sl = getAllScripByExchange((String)e.getNewValue());
     setAllScriptExchange(sl);  //please write setAllScriptExchange method yourself
     FacesContext.getCurrentInstance().renderResponse();
  }

onchange イベントにより、ページがリロードされます。

于 2012-05-28T07:00:30.743 に答える