0

JSF2.0、Jboss As 7.1.1 final および JDK 6.0、PrimeFaces 3.4.2 でビルドされた JSF プロジェクトの *.xhtml ページに 2 組のラジオ ボタンを配置するコードを作成しました。

           <h:panelGrid columns="2">
                <h:selectOneRadio value="#{calendarBean.radioFirst}">
                    <f:selectItem id="morning" itemValue="morning" itemLabel="Morning"/>
                    <f:selectItem id="afternoon" itemValue="afternoon" itemLabel="Afternoon"/>
                </h:selectOneRadio>
                <h:selectOneRadio style="padding-left: 170px" value="#{calendarBean.radioSecond}">
                    <f:selectItem id="noon" itemValue="noon" itemLabel="Noon"/>
                    <f:selectItem id="endofday" itemValue="endofday" itemLabel="End Of Day"/>
                </h:selectOneRadio>
            </h:panelGrid>

ビーンは:

private String radioFirst="morning";
private String radioSecond="endofday";

public String getRadioFirst() {
    return radioFirst;
}

public void setRadioFirst(String radioFirst) {
    this.radioFirst = radioFirst;
}

public String getRadioSecond() {
    return radioSecond;
}

public void setRadioSecond(String radioSecond) {
    this.radioSecond = radioSecond;
}

ラジオボタンの値を選択したいアクションイベントで呼び出すメソッドを作成しました。メソッドが呼び出されると、ラジオ ボタンの値を「朝」と「終日」として取得します。これら 2 つは Bean 変数の初期値だからです。

private String radioFirst="morning";
private String radioSecond="endofday";

しかし、ラジオボタンのオプションを変更すると、更新された値が得られず、同じ古い初期値になります。変更された値を取得するにはどうすればよいですか? 助けてください!

4

2 に答える 2

0

アクションボタンを次のように変更する必要があります。

<p:commandButton actionListener="#{userLeaveBean.addAppliedLeave}" styleClass="apply_button" value="Create Leave">
    <f:attribute name="userId" value="#{employee.name}"/>
</p:commandButton>

@MikeBraunが示唆したように、window.reload(). 何かを更新したい場合は、 のupdate属性を使用して行うことができますp:commandButton

そして、これに従ってBeanを変更します:

@ManagedBean
@SessionScoped // Could probably be moved to @RequestScoped or @ViewScoped
public class UserLeaveBean
{
    @ManagedProperty(value="#{calendarBean}")
    CalendarBean calendarBean;

    public void setCalendarBean(CalendarBean calendarBean)
    {
        this.calendarBean = calendarBean;
    }

    public void addAppliedLeave(ActionEvent event)
    {
        System.out.println("Radio 1 : " + calendarBean.getRadioFirst());
        System.out.println("Radio 2 : " + calendarBean.getRadioSecond());
    }
}

ManagedProperty、現在の Bean 内に注入することにより、他の Bean にアクセスできるようにします。SessionScopedを使用しているため、適切なスコープを使用してくださいwindow.reload()

重要 : Bean は、ManagedProperty少なくとも他の Bean と同じ長さの範囲にする必要があります。

続きを読む :

于 2013-05-29T09:16:04.047 に答える
0

三つのこと

  1. この使用シナリオではセッション スコープを使用しないでください。ユーザーが複数のタブで同じページを開くと、これは完全に間違った結果になります。request スコープまたは view スコープを使用します。

  2. アクション リスナーの代わりに通常のアクションを使用し、ラジオ ボタンの値を属性として指定しないでください。これは意味がありません。selectOneRadio コンポーネントは、バッキング Bean に更新された値を設定します。アクション メソッドが呼び出されると、Bean のインスタンス フィールドを介してこれらの値にアクセスできます。

  3. window.reload は省略します。アクション後にページ全体を更新する必要がある場合は、p:commandButton で ajax を false に設定するか、h:commandButton を使用します。

于 2013-05-29T08:47:55.553 に答える