我有以下非常简单的页面,包含使用PF 5,netbeans和glassfish的两个selectoneradio组。我已经检查了几个浏览器,结果是一样的。
第一个控制另一个。当我更改choice1时,我可以看到选项2中的按钮被禁用并启用,因为我期待。
当页面是“新鲜的”时我可以在choice2中切换值。但是第一次我改变choice1中的值导致choice2改变......它仍然无法访问。
任何人都可以向我解释原因吗?我想我读过一个有同样问题的复选框,因为你看到的不是控制而是图像。但我无法再找到这些信息。
代码:
我的页面:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</h:head>
<body>
<h:form id="prodForm">
<p:selectOneRadio id="choice1" value="#{myBean.firstChoice}" >
<f:selectItem itemLabel="0 choice" itemValue="0" />
<f:selectItem itemLabel="1 choice" itemValue="1" />
<f:selectItem itemLabel="2 choice" itemValue="2" />
<f:selectItem itemLabel="3 choice" itemValue="3" />
<f:selectItem itemLabel="4 choice" itemValue="4" />
<f:selectItem itemLabel="5 choice" itemValue="5" />
<p:ajax update="choice2 ch2Id0 ch2Id1 ch2Id2 ch2Id3" listener="#{myBean.doSomething()}" />
</p:selectOneRadio>
<h3>Choice 2</h3>
<p:selectOneRadio id="choice2" value="#{myBean.secondChoice}" layout="custom" >
<f:selectItem itemLabel="Choice 2 0" itemValue="0" />
<f:selectItem itemLabel="Choice 2 1" itemValue="1" />
<f:selectItem itemLabel="Choice 2 2" itemValue="2" />
<f:selectItem itemLabel="Choice 2 3" itemValue="3" />
</p:selectOneRadio>
<p:radioButton id="ch2Id0" for="choice2" itemIndex="0" disabled="#{myBean.firstChoice lt 1}" />
<h:outputLabel for="ch2Id1" value="Choice 2 0" /><br/>
<p:radioButton id="ch2Id1" for="choice2" itemIndex="1" disabled="#{myBean.firstChoice lt 3}" />
<h:outputLabel for="ch2Id1" value="Choice 2 1" /><br/>
<p:radioButton id="ch2Id2" for="choice2" itemIndex="2" disabled="#{myBean.firstChoice lt 4}" />
<h:outputLabel for="ch2Id1" value="Choice 2 2" /><br/>
<p:radioButton id="ch2Id3" for="choice2" itemIndex="3" disabled="#{myBean.firstChoice lt 5}" />
<h:outputLabel for="ch2Id1" value="Choice 2 3" /><br/>
</h:form>
</body>
和我的豆子:
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
@ManagedBean(name = "myBean")
@SessionScoped
public class MyBean implements Serializable {
Integer firstChoice = 5;
Integer secondChoice = 0;
public void doSomething(){
System.out.println("In doSomething");
}
public Integer getFirstChoice() {
return firstChoice;
}
public void setFirstChoice(Integer firstChoice) {
this.firstChoice = firstChoice;
}
public Integer getSecondChoice() {
return secondChoice;
}
public void setSecondChoice(Integer secondChoice) {
this.secondChoice = secondChoice;
}
}
希望有人可以提供帮助。
提前致谢。
金
答案 0 :(得分:0)
以下是解决方案<p:ajax update="@form" listener="#{myBean.doSomething()}" />
。
或者如果您不想更新表单,可以将<p:selectOneRadio>
和<p:radioButton>
组包装在<p:outputPanel>
内,然后只需更新该面板。
像这样:
<h:form id="prodForm" prependId="false">
<p:selectOneRadio valueChangeListener="#{myBean.doSomething()}" id="choice1" value="#{myBean.firstChoice}" >
<f:selectItem itemLabel="0 choice" itemValue="0" />
<f:selectItem itemLabel="1 choice" itemValue="1" />
<f:selectItem itemLabel="2 choice" itemValue="2" />
<f:selectItem itemLabel="3 choice" itemValue="3" />
<f:selectItem itemLabel="4 choice" itemValue="4" />
<f:selectItem itemLabel="5 choice" itemValue="5" />
<p:ajax update="choice2panel" />
</p:selectOneRadio>
<h3>Choice 2</h3>
<p:outputPanel id="choice2panel">
<p:selectOneRadio immediate="true" id="choice2" value="#{myBean.secondChoice}" layout="custom" >
<f:selectItem itemLabel="Choice 2 0" itemValue="0" />
<f:selectItem itemLabel="Choice 2 1" itemValue="1" />
<f:selectItem itemLabel="Choice 2 2" itemValue="2" />
<f:selectItem itemLabel="Choice 2 3" itemValue="3" />
</p:selectOneRadio>
<p:radioButton id="ch2Id0" for="choice2" itemIndex="0" disabled="#{myBean.firstChoice lt 1}" />
<h:outputLabel id="l0" for="ch2Id0" value="Choice 2 0" /><br/>
<p:radioButton id="ch2Id1" for="choice2" itemIndex="1" disabled="#{myBean.firstChoice lt 3}" />
<h:outputLabel id="l1" for="ch2Id1" value="Choice 2 1" /><br/>
<p:radioButton id="ch2Id2" for="choice2" itemIndex="2" disabled="#{myBean.firstChoice lt 4}" />
<h:outputLabel id="l2" for="ch2Id2" value="Choice 2 2" /><br/>
<p:radioButton id="ch2Id3" for="choice2" itemIndex="3" disabled="#{myBean.firstChoice lt 5}" />
<h:outputLabel id="l3" for="ch2Id3" value="Choice 2 3" /><br/>
</p:outputPanel>
</h:form>