2016-07-18 9 views
0

이 예제 코드는selectOneRadio 페이지 번호가있는 dataList 내에서 확인 된 값이 손실 됨

My xhtml 페이지입니다. 내 콩

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; 
    } 

} 

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

내가 매김에서 페이지보기를 변경 전 페이지에있는 라디오 버튼을 체크하면 (... 1,2,3)이있을 때 오류가 나타납니다 '1' 그리고 나는 '2'페이지로 이동하고 '1'페이지로 돌아와서 라디오 버튼을 체크하지 않는다. 왜 이런 일이 발생합니까? 어떻게 수정합니까? radioButton에서 값을 확인한 상태로 유지해야합니다.

답변

0

이 문제를 해결했습니다.

제가 존재하는 경우 확인 된 값을 얻는 SelectoneRadio를 2 개 만듭니다. 그리고 다른 하나는 값을 넣는 것입니다. 저는 Ajax를 사용하여 ID를 전달합니다. 지도에 ID가 포함되어있는 경우 라디오에서 값을지도에 직접 설정 했으므로 아약스 만 업데이트합니다. 대답하고 ID를 넣어

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; 
    } 

} 

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

그리고 빈에서

은 ..., 당신은 값 'teste'널 (null)을 확인해야합니다.