我如何将p:selectOneRadio数据列表发送到托管bean?

问题描述 投票:0回答:2

我有一个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 "";
    }       

}

我该如何解决?在此先感谢

jsf primefaces
2个回答
2
投票

关键是这一行:

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

您实际上将所有3个选择项都绑定到一个bean属性,根据该属性,最后发送的请求参数实际上是最后一个结束并覆盖bean属性的参数。因此,您需要将其绑定到数字数组或列表的相应元素,例如in>

<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
投票

先生unt子您能否说明如何使用ui:repeat中的varStatus以及您使用过MB.numbers [status.index]的部分?我是个初学者,有些事情很难理解...如果您不介意...

© www.soinside.com 2019 - 2024. All rights reserved.