2013-10-24 26 views
0

从来就p的动态列表:selectOneRadio,即是这样的:我该如何向我的managedbean发送p:selectOneRadio数据列表?

1 op1 op2 op3 
2 op1 op2 op3 
3 op1 op2 op3 

所以,当我让我的提交我想知道被选定为第1行的选项,并选择了行的选项2和第3行选择了哪个选项。 我的问题是我只能得到最后选择的选项。 这里是我的XHTML:

<ui:repeat var="o" value="#{perfilesMB.numbers}" varStatus="status"> 
    <p:selectOneRadio value="#{perfilesMB.number}"> 
     <p:ajax listener="#{perfilesMB.handleCityChange}" /> 
     <f:selectItem itemLabel="Option 1" itemValue="1" /> 
     <f:selectItem itemLabel="Option 2" itemValue="2" /> 
     <f:selectItem itemLabel="Option 3" itemValue="3" /> 
    </p:selectOneRadio>              
</ui:repeat> 

这里是我管理的Bean:

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Arrays; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.SessionScoped; 
import org.springframework.dao.DataAccessException; 
import javax.faces.context.FacesContext; 
import javax.faces.application.FacesMessage; 
import org.primefaces.event.RowEditEvent; 

@ManagedBean(name="perfilesMB") 
//@RequestScoped 
@SessionScoped 
public class PerfilesManagedBean implements Serializable{ 
    private List<String> numbers; 
    private String number; 

    public List<String> getNumbers() { 
     return numbers; 
    } 

    public void setNumbers(List<String> numbers) { 
     this.numbers = numbers; 
    } 


    public String getNumber() { 
     return number; 
    } 

    public void setNumber(String number) { 
     this.number = number; 
    } 

    //private String nivel; 
    //private int id_seccion; 

    public PerfilesManagedBean() { 
     niveles = new ArrayList<String>(); 
     numbers = new ArrayList<String>(); 
     for (int i = 0; i < 3; i++) { 
      numbers.add("" + i); 
     } 
    } 

    public String sendData(){ 
     System.out.println("Number: " + number); 
     return ""; 
    }  

} 

如何解决呢? 在此先感谢

回答

2

的关键是这一行:

<p:selectOneRadio value="#{perfilesMB.number}"> 

你基本上是结合所有3个选择的项目到一个bean的属性,根据其发送的最后请求参数其实是最后一个结束并覆盖bean属性。因而需要将其在

<ui:repeat ... varStatus="status"> 
    <p:selectOneRadio value="#{perfilesMB.numberSelection[status.index]}" /> 
</ui:repeat> 

与背衬

List<String> numberSelection;//initialized and equal to the amount of items in your UIRepeat component, i.e. with 3 empty strings added 
+0

由于它的工作结合的阵列或列表,数字中的对应元件,像完美 – linker85

+1

为什么不'值=” #{perfilesMB.numbers [status.index]}“'? – BalusC

+0

@BalusC因为从OP的问题来看,特别是来自bean的构造函数,这个列表应该被用于选项,也就是说,可能的''代替了硬编码。 – skuntsel

相关问题