JSF Primefaces无法重新启用radiobutton

时间:2014-12-04 11:44:05

标签: jsf primefaces

我有以下非常简单的页面,包含使用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;
}
}

希望有人可以提供帮助。

提前致谢。

1 个答案:

答案 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>