我编写了一段代码,将两对单选按钮放在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>
The Bean是:
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;
}
我已经编写了一个方法来调用Action事件,我想要选中单选按钮的值。当方法调用时,我得到单选按钮的值为“morning”和“endofday”,因为这两个是bean变量的初始值。
private String radioFirst="morning";
private String radioSecond="endofday";
但是,如果我更改单选按钮选项,我不会获得更新的值,它是相同的旧初始值。如何获得更改的值?请帮忙!
答案 0 :(得分:0)
三件事
请勿将会话范围用于此使用方案。当您的用户在多个标签页中打开同一页面时,这将完全出错。使用请求范围或查看范围。
使用常规操作而不是动作侦听器,并且不要将单选按钮值作为属性提供。这毫无意义。 selectOneRadio组件将在您的辅助bean上设置更新的值。调用操作方法时,您可以通过bean的实例字段访问这些值。
忽略window.reload。如果在操作后需要刷新整页,请在p:commandButton上将ajax设置为false或使用h:commandButton。
答案 1 :(得分: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()
。
重要提示: ManagedProperty
bean的长度必须至少与其他bean的长度相同。
了解详情: