selectOneRadio在带有分页的dataList中丢失了检查值



我有这个示例代码,

我的xhtml页面。

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:f="http://java.sun.com/jsf/core">
<h:head>
</h:head>
<h:body>
    <p:dataList value="#{dataListView.lista}" var="l" type="unordered"
        itemType="none" paginator="true" rows="1" styleClass="paginated">
        <f:facet name="header">
                Paginator
            </f:facet>
        <p:selectOneRadio id="resposta" value="#{dataListView.resposta}">
            <f:selectItem itemLabel="Certo" itemValue="Certo" />
            <f:selectItem itemLabel="Errado" itemValue="Errado" />
        </p:selectOneRadio>
    </p:dataList>
</h:body>
</html>

我的豆

package br.com.so.teste;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import br.com.so.modelo.Questao;
@Named
@ViewScoped
public class DataListView implements Serializable {
    private List<String> lista;
    private String resposta;
    @PostConstruct
    public void init() {
        lista = new ArrayList<>();
        lista.add("1");
        lista.add("2");
        lista.add("3");
        lista.add("4");
        lista.add("5");
    }
    public List<String> getLista() {
        return lista;
    }
    public void setLista(List<String> lista) {
        this.lista = lista;
    }
    public String getResposta() {
        return resposta;
    }
    public void setResposta(String resposta) {
        this.resposta = resposta;
    }
}

当我更改页面视图时会出现错误,在分页中有(1,2,3…)如果我选中页面"1"中的单选按钮,然后转到页面"2",然后返回页面"1),则不选中单选按钮。为什么会发生这种情况?我该怎么修?我需要在单选按钮中检查该值。

我使用这个解决了问题。

我创建了2个SelectoneRadio,其中一个用于检查值(如果存在)。。另一个只是计算价值。我使用Ajax传递ID。如果映射包含id,我只使用ajax进行更新,因为radio直接在映射中设置值。

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:f="http://java.sun.com/jsf/core">
<h:head>
</h:head>
<h:body>
    <h:form id="formulario">
        <p:dataList value="#{dataListView.lista}" var="l" type="unordered"
            itemType="none" paginator="true" rows="1" styleClass="paginated">
            <f:facet name="header">
                Paginator
            </f:facet>
            <p:selectOneRadio value="#{dataListView.teste}"
                rendered="#{dataListView.resposta[l] == null}">
                <p:ajax listener="#{dataListView.processaResposta(l)}" event="click"
                    update="formulario"></p:ajax>
                <f:selectItem itemLabel="Certo" itemValue="Certo" />
                <f:selectItem itemLabel="Errado" itemValue="Errado" />
            </p:selectOneRadio>
            <p:selectOneRadio value="#{dataListView.resposta[l]}"
                rendered="#{dataListView.resposta[l] != null}">
                <p:ajax event="click" update="formulario"></p:ajax>
                <f:selectItem itemLabel="Certo" itemValue="Certo" />
                <f:selectItem itemLabel="Errado" itemValue="Errado" />
            </p:selectOneRadio>
        </p:dataList>
    </h:form>
</h:body>
</html>

在豆子里。。。

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class DataListView implements Serializable {
    private List<String> lista;
    private Map<String, String> resposta;
    private String teste;
    @PostConstruct
    public void init() {
        lista = new ArrayList<>();
        lista.add("1");
        lista.add("2");
        lista.add("3");
        lista.add("4");
        lista.add("5");
        resposta = new HashMap<>();
    }
    public List<String> getLista() {
        return lista;
    }
    public void setLista(List<String> lista) {
        this.lista = lista;
    }
    public Map<String, String> getResposta() {
        return resposta;
    }
    public void setResposta(Map<String, String> resposta) {
        this.resposta = resposta;
    }
    public void processaResposta(String action) {
        resposta.put(action, teste);
        teste = null;
    }
    public String getTeste() {
        return teste;
    }
    public void setTeste(String teste) {
        this.teste = teste;
    }
}

在输入答案和ID之后,您需要将值"teste"设为null。

相关内容

  • 没有找到相关文章

最新更新