24

Primefaces 3.4.2 を使用しています。

私のJSFページには次のものがあります

<p:selectOneMenu id="emp" value="#{mymb.emp.employeeName}" 
        valueChangeListener="#{mymb.handleChange}" 
        required="true"
        style="width: 150px;">
    <f:selectItem noSelectionOption="true" 
            itemLabel="Please  Select"/>
    <f:selectItems value="#{mymb.employeeList}" var="emp"
            itemLabel="#{emp.employeeName}"
            itemValue="#{emp.employeeNumber}"/>
    <p:ajax update="sublist"/>
</p:selectOneMenu>

そしてManagedBeanで

public void handleChange(ValueChangeEvent event){  
    System.out.println("here "+event.getNewValue());
}

問題は起動していないことです。valueChangeListenerつまり、handleChangeメソッドが呼び出されていません。以下で試してみましたが、どちらもうまくいきません。

<p:ajax update="sublist"  listener="#{mymb.handleChange}" />  

別の JSF ページ:

<ui:composition template="/templates/layout.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
    <ui:define name="content">
        <h:head>
        </h:head>
        <h:body>
            <h:form id="form">                      
                <p:panelGrid columns="6">
                    <h:outputLabel value="Employees" for="employees" />
                    <p:selectOneMenu id="employees"
                            value="#{mymb.employeesList}" 
                            required="true">
                        <f:selectItems value="#{mymb.employeesList}" var="emp"
                                itemLabel="#{emp.employeeName}" />
                        <p:ajax listener="#{mymb.handleChange}"   />  
                    </p:selectOneMenu>                  
                </p:panelGrid>
            </h:form>
        </h:body>
    </ui:define>
</ui:composition>

im2bw ドキュメントが言うように:

level[0,1]の範囲で指定してください。この範囲は、画像のクラスで可能な信号レベルに相対的です。したがって、レベル値 0.5 は、クラスに関係なく、黒と白の中間です。

これにより、より柔軟/便利になりimage < levelます。画像の取得方法によっては、値が 0 ~ 255 の範囲になる場合があり、その場合、別の方法では目的の結果が得られません。それ以外の場合は同等です。

4

8 に答える 8

55

を使用する場合valueChangeListenerは、新しいオプションが選択されるたびにフォームを送信する必要があります。このようなもの:

<p:selectOneMenu value="#{mymb.employee}" onchange="submit()"
                 valueChangeListener="#{mymb.handleChange}" >
    <f:selectItems value="#{mymb.employeesList}" var="emp"
                   itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeID}" />
</p:selectOneMenu>

public void handleChange(ValueChangeEvent event){  
    System.out.println("New value: " + event.getNewValue());
}

または、 を使用する場合は、次のようになります<p:ajax>

<p:selectOneMenu value="#{mymb.employee}" >
    <p:ajax listener="#{mymb.handleChange}" />
    <f:selectItems value="#{mymb.employeesList}" var="emp"
                   itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeID}" />
</p:selectOneMenu>

private String employeeID;

public void handleChange(){  
    System.out.println("New value: " + employee);
}

注意すべきことの1つは、サンプルコードで、valueあなたの属性が ofと同じであることがわかりまし<p:selectOneMenu>た。あなたのは、従業員のリストではなく、単一の従業員を指す上記の例に似ているはずです。#{mymb.employeesList}value<f:selectItems>value<p:selectOneMenu>

于 2013-02-19T20:22:46.453 に答える
16

古い値と新しい値の両方valueChangeListenerに関心がある場合にのみ必要です。

新しい値のみに関心がある場合は、<p:ajax>or<f:ajax>を使用することをお勧めします。

ajax 呼び出しが機能しない理由はいくつか考えられます。最初に、ハンドラー メソッドのメソッド シグネチャを変更する必要があります。つまり、パラメーターを削除します。その後、マネージド Bean 変数に直接アクセスできます。

public void handleChange(){  
  System.out.println("here "+ getEmp().getEmployeeName());
}

リスナーが呼び出された時点で、新しい値はすでに設定されています。(暗黙のうちに、el 式mymb.emp.employeeNameが対応する getter/setter メソッドによって正しくサポートされていると想定していることに注意してください。)

于 2013-02-19T12:15:01.640 に答える
10
<p:ajax listener="#{my.handleChange}" update="id of component that need to be rerender after change" process="@this" />



import javax.faces.component.UIOutput;
import javax.faces.event.AjaxBehaviorEvent;

public void handleChange(AjaxBehaviorEvent vce){  
  String name= (String) ((UIOutput) vce.getSource()).getValue();
}
于 2013-05-14T14:21:37.443 に答える
5

すべて属性で定義できますf:ajax

すなわち

    <p:selectOneMenu id="employees" value="#{mymb.employeesList}" required="true">
         <f:selectItems value="#{mymb.employeesList}" var="emp" itemLabel="#{emp.employeeName}" />
         <f:ajax event="valueChange" listener="#{mymb.handleChange}" execute="@this" render="@all" />
    </p:selectOneMenu>

eventclick : 、またはのような通常の DOM イベントにすることができますvalueChange

execute :これは、リクエスト処理ライフサイクルの「実行」部分に参加するコンポーネントのクライアント ID のスペース区切りのリストです。

render :リクエスト処理ライフサイクルの「レンダリング」部分に参加するコンポーネントの clientIds。アクションが完了したら、更新するコンポーネントを定義できます。Id、IdList、またはこれらのキーワードを追加できます: @this@form、。@all@none

次のリンクから属性リスト全体にアクセスできます: http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/f/ajax.html

于 2016-01-19T09:37:48.507 に答える
2

イベント属性で p:ajax を使用してみてください。

于 2013-02-21T05:10:07.343 に答える
2

私の問題は、Spring Securyty を使用していて、前のページが faces-redirect=true を使用してページを呼び出さず、ページに Java 警告が表示され、コントロールが変更イベントを発生させないことでした。

解決策: 前のページは、faces-redirect=true を使用してページを呼び出す必要があります。

于 2015-03-31T18:42:32.417 に答える
0

これは私のために働く:

ダイアログ内で使用できますが、パネル、アコーディオンなどのコンポーネント内にダイアログを配置することはできません。

于 2013-08-22T20:11:17.743 に答える