2016-07-18 6 views
0

このサンプルコードは、selectOneRadioページ内のデータリスト内のチェックされた値が失われました

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

これを使用して解決しました。

2つのSelectoneRadioを作成します。存在する場合は、チェックされた値を取得します。 もう1つは値を入力するだけです。 私はIDを渡すためにAjaxを使用します。 マップにidが含まれている場合は、無線で地図に直接値が設定されるため、ajaxを使用して更新します。

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

し、Beanに...

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' ヌルを作成する必要があります。

関連する問題