0

我编写了一段代码,将两对单选按钮放在 JSF2.0、Jboss As 7.1.1 final 和 JDK 6.0、PrimeFaces 3.4.2 中构建的 JSF 项目的 *.xhtml 页面中。

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

我已经编写了一个方法来调用我想要选择单选按钮的值的动作事件。当该方法调用时,我将单选按钮的值设为“morning”和“endofday”,因为这两个是 bean 变量的初始值。

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

但是,如果我更改单选按钮选项,我不会得到更新的值,它是相同的旧初始值。如何获得更改后的值?请帮忙!

4

2 回答 2

0

三件事

  1. 不要将会话范围用于此使用场景。当您的用户在多个选项卡中打开同一页面时,这将完全出错。使用请求范围或查看范围。

  2. 使用常规操作而不是操作侦听器,并且不要将单选按钮值作为属性提供。这是没有意义的。selectOneRadio 组件将在您的支持 bean 上设置更新的值。当您的操作方法被调用时,您将可以通过 bean 的实例字段访问这些值。

  3. 离开window.reload。如果您需要在操作后刷新整个页面,请将 p:commandButton 上的 ajax 设置为 false 或使用 h:commandButton。

于 2013-05-29T08:47:55.553 回答
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 回答