Ola Pessoal,
Tenho uma aplicação para gerenciar uma pelada do fim de semana e estou com o seguinte problema:
uso MyFaces 1.2.2 e Tomahawk 1.1.6 e facelets 1.0.14 e tenho o seguinte jspx chamado lstjogador.jspx:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE jsp:root [<!ENTITY nbsp " ">]>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jstl/core"
version="2.0">
<ui:composition template="/pages/template/defaultTemplate.jspx">
<ui:define name="corpo">
<t:messages/>
<h:form id="frmJogador">
<table width="100%" height="100%">
<tr>
<td valign="top" align="left">
<SPAN> <t:outputText value="Filtro:"/></SPAN>
<table style="border: 1px solid black; width:100%">
<tr>
<td style="width:39%">
<t:outputText value="Nome Jogador:"/>
&nbsp;
<t:inputText id="nomeJogador" value="#{manterJogadorBean.nomeJogadorFiltro}"></t:inputText>
</td>
<td>
<t:outputText value="Ativo:"/>
&nbsp;
<t:selectBooleanCheckbox id="chkAtivo" value="#{manterJogadorBean.ativoJogadorFiltro}"></t:selectBooleanCheckbox>
</td>
</tr>
<tr>
<td colspan="2">
<t:commandButton value="Pesquisar" actionListener="#{manterJogadorBean.pesquisar}" />
</td>
</tr>
</table>
<br />
<t:selectManyCheckbox id="chkSelecaoRegistro"
layout="spread"
forceId="true"
forceIdIndex="false"
immediate="true"
value="#{manterJogadorBean.selecaoRegistro}">
<f:selectItems value="#{manterJogadorBean.gridJogadoresSelectItens}" />
</t:selectManyCheckbox>
<t:dataTable var="current" id="tblJogador" border="1" width="90%"
value="#{manterJogadorBean.gridJogadores}"
rowIndexVar="index">
<t:column headerstyle="text-align:left; width: 5%;">
<f:facet name="header" >
<h:panelGroup>
&nbsp;
</h:panelGroup>
</f:facet>
<t:checkbox for=":frmJogador:chkSelecaoRegistro" index="#{index}" />
</t:column>
<t:column headerstyle="text-align:left; width: 90%;">
<f:facet name="header">
<h:outputText value=" Nome do Jogador" />
</f:facet>
<t:outputText value="#{current.nome}"/>
</t:column>
<t:column headerstyle="text-align:left; width: 5%;">
<f:facet name="header">
<h:outputText value="Ativo" />
</f:facet>
<t:outputText value="Sim" rendered="#{current.ativo}"/>
<t:outputText value="Não" rendered="#{!current.ativo}"/>
</t:column>
</t:dataTable>
</td>
</tr>
</table>
</h:form>
</ui:define>
</ui:composition>
</jsp:root>
ManageBean:
package com.futebol.view.managebeans;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.html.HtmlSelectManyCheckbox;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import javax.faces.model.SelectItemGroup;
import com.futebol.model.Util;
import com.futebol.model.ejb.serviceif.IJogadorServiceLocalEJB;
import com.futebol.model.util.EJB;
import com.futebol.model.util.ServiceLocator;
import com.futebol.model.vo.JogadorVO;
import com.futebol.model.vo.filtro.JogadorFiltro;
public class ManterJogadorMB extends ManageBeanAb {
private String nomeJogadorFiltro;
private Boolean ativoJogadorFiltro = true;
private List<Integer> selecaoRegistro;
private String selecaoRegistroString;
private List<SelectItem> gridJogadoresSelectItens = new ArrayList<SelectItem>(0);;
private List<JogadorVO> gridJogadoresList = new ArrayList<JogadorVO>(0);
private ListDataModel gridJogadores = new ListDataModel();
private SelectItemGroup group = new SelectItemGroup();
private HtmlSelectManyCheckbox chkSelecaoRegistro;
public ManterJogadorMB(){
}
public String getSelecaoRegistroString() {
return selecaoRegistroString;
}
public void setSelecaoRegistroString(String selecaoRegistroString) {
this.selecaoRegistroString = selecaoRegistroString;
}
public SelectItemGroup getGroup() {
return group;
}
public void setGroup(SelectItemGroup group) {
this.group = group;
}
public String getNomeJogadorFiltro() {
return nomeJogadorFiltro;
}
public void setNomeJogadorFiltro(String nomeJogadorFiltro) {
this.nomeJogadorFiltro = nomeJogadorFiltro;
}
public Boolean getAtivoJogadorFiltro() {
return ativoJogadorFiltro;
}
public void setAtivoJogadorFiltro(Boolean ativoJogadorFiltro) {
this.ativoJogadorFiltro = ativoJogadorFiltro;
}
public List<Integer> getSelecaoRegistro() {
return selecaoRegistro;
}
public void setSelecaoRegistro(List<Integer> selecaoRegistro) {
this.selecaoRegistro = selecaoRegistro;
}
public List<SelectItem> getGridJogadoresSelectItens() {
return gridJogadoresSelectItens;
}
public void setGridJogadoresSelectItens(
List<SelectItem> gridJogadoresSelectItens) {
this.gridJogadoresSelectItens = gridJogadoresSelectItens;
}
public ListDataModel getGridJogadores() {
return gridJogadores;
}
public void setGridJogadores(ListDataModel gridJogadores) {
this.gridJogadores = gridJogadores;
}
public HtmlSelectManyCheckbox getChkSelecaoRegistro() {
return chkSelecaoRegistro;
}
public void setChkSelecaoRegistro(HtmlSelectManyCheckbox chkSelecaoRegistro) {
this.chkSelecaoRegistro = chkSelecaoRegistro;
}
public void validarCheck(FacesContext context, UIComponent component,Object param){
System.out.println("sadasd");
}
public List<JogadorVO> getGridJogadoresList() {
return gridJogadoresList;
}
public void setGridJogadoresList(List<JogadorVO> gridJogadoresList) {
this.gridJogadoresList = gridJogadoresList;
}
public void pesquisar(ActionEvent ev){
try {
IJogadorServiceLocalEJB lJogadorService =
(IJogadorServiceLocalEJB)ServiceLocator.getServico(EJB.JOGADOR_EJB_LOCAL);
JogadorFiltro lFiltro = new JogadorFiltro();
if(!Util.isEmptyOrNull(this.getNomeJogadorFiltro())){
lFiltro.setNome(this.getNomeJogadorFiltro());
}
if(!Util.isEmptyOrNull(this.getAtivoJogadorFiltro())){
lFiltro.setAtivo(this.getAtivoJogadorFiltro());
}
List<JogadorVO> lCollJogadores = lJogadorService.obterPorFiltro(lFiltro);
if(!Util.isEmptyOrNull(lCollJogadores)){
this.setGridJogadoresList(lCollJogadores);
this.setGridJogadores(new ListDataModel(lCollJogadores));
this.gridJogadoresSelectItens = new ArrayList<SelectItem>(lCollJogadores.size());
SelectItem lSelectItem = null;
for(JogadorVO current : lCollJogadores){
lSelectItem = new SelectItem(current.getCodJogador().toString(),"");
this.gridJogadoresSelectItens.add(lSelectItem);
}
}
} catch (Exception e) {
FacesContext.getCurrentInstance().addMessage("erro", new FacesMessage(e.getMessage()));
}
}
public String pesquisar(){
try {
IJogadorServiceLocalEJB lJogadorService =
(IJogadorServiceLocalEJB)ServiceLocator.getServico(EJB.JOGADOR_EJB_LOCAL);
JogadorFiltro lFiltro = new JogadorFiltro();
if(!Util.isEmptyOrNull(this.getNomeJogadorFiltro())){
lFiltro.setNome(this.getNomeJogadorFiltro());
}
if(!Util.isEmptyOrNull(this.getAtivoJogadorFiltro())){
lFiltro.setAtivo(this.getAtivoJogadorFiltro());
}
List<JogadorVO> lCollJogadores = lJogadorService.obterPorFiltro(lFiltro);
if(!Util.isEmptyOrNull(lCollJogadores)){
this.setGridJogadores(new ListDataModel(lCollJogadores));
this.gridJogadoresSelectItens = new ArrayList<SelectItem>(lCollJogadores.size());
for(JogadorVO current : lCollJogadores){
this.gridJogadoresSelectItens.add(new SelectItem(current.getCodJogador(),""));
}
}
return "pesquisar";
} catch (Exception e) {
}
return "falha";
}
}
a pagina é renderizada, mas ao selecionar um checkbox ocorre um validation error, porem se eu usar o <f:selectItem itemValue=“valor” itemLabel=“label”/> ao inves do <f:selectItems/> o mesmo funciona perfeitamente, mas como se tratam de dados dinamicos não posso usar o selectItem.
Não sei se alguem aqui ja passou por isso mas creio que seja um BUG pois quando utilizo o radioButton, funciona sem problemas
Obbrigado