Problema rich:dataTable - h:commandLink não renderiza

2 respostas
L

Fala galera,

Estou com um problema ao utilizar o rich:dataTable.

No meu table, tenho alguns <h:commandLink>, quando renderizam pela primeira vez eles funcionam, mas quando faço alguma requisição pelo a4j:commandButton ou uso a paginação do rich:datascroller, todos os commandLink somem, tirando os links e aparecendo apenas textos normais.

Alguém poderia me ajudar?

[]'s

RESOLVIDO: Consegui resolver galera, eu tava utilizando a tag , quando o datatable renderiza pela segunda vez, ela buga.

Flw

2 Respostas

L

[/code]E ae galera,

Eu tenho a seguinte situação
rich:dataTable que lista os objetos e tem uma ação para excluir dentro de h:commandlink

A ação funciona corretamente na primeira vez, porém se eu utilizo a paginação do datascroller
ela para de funcionar.

pS.: scopo do meu manager bean esta como session
já tentei setar como false a facelets.BUILD_BEFORE_RESTORE

vou postar meu xhtml, web.xml e managedbean

xhtml
<rich:panel>
		<f:facet name="header">
			Setores Cadastrados
		</f:facet>
			<h:form id="formTableSetores">
			 <rich:dataTable  id="tabelaSetores" onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
			                    onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
			                    cellpadding="0" cellspacing="0" rows="10"
			                    width="500" border="0" var="item" value="#{setorController.todos}">
				 <rich:column breakBefore="true">
				 	<f:facet name="header">
				 		ID
				 	</f:facet>
				 	<h:outputText value="#{item.pkIdSetor}" />
				 </rich:column>
				 <rich:column>
				 	<f:facet name="header">
				 		Setor
				 	</f:facet>
				 	<h:outputText value="#{item.nomSetor}" />
				 </rich:column>
				 <rich:column align="center">
				 	<f:facet name="header">
				 		Excluir
				 	</f:facet>
				 	<h:commandLink  action="#{setorController.excluir}" immediate="true">
				 		<img src="../image/deletar.png" height="15px" width="15px" border="0"/>
				 	</h:commandLink>
				 </rich:column>
			</rich:dataTable>
			<rich:datascroller id="scrollSetor" for="tabelaSetores"  maxPages="20" reRender="tabelaSetores"/> 
			</h:form>
	</rich:panel>
web.xml
<?xml version="1.0"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Facelets StarterKit</description>
 <display-name>ProjetoPortaria</display-name>
 <context-param>
  <param-name>com.sun.faces.validateXml</param-name>
  <param-value>true</param-value>
 </context-param>
 <context-param>
  <param-name>com.sun.faces.verifyObjects</param-name>
  <param-value>true</param-value>
 </context-param>
 <context-param>
  <param-name>facelets.DEVELOPMENT</param-name>
  <param-value>true</param-value>
 </context-param>
 <context-param>
  <param-name>facelets.REFRESH_PERIOD</param-name>
  <param-value>2</param-value>
 </context-param>
 <context-param>
 <param-name>facelets.BUILD_BEFORE_RESTORE</param-name>
 <param-value>false</param-value>
 </context-param>
 <context-param>
  <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
  <param-value>.xhtml</param-value>
 </context-param>
 <context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>client</param-value>
 </context-param>
 <context-param>
  <param-name>org.apache.myfaces.trinidad.ALTERNATE_VIEW_HANDLER</param-name>
  <param-value>com.sun.facelets.FaceletViewHandler</param-value>
 </context-param>
 <context-param>
  <param-name>org.richfaces.CONTROL_SKINNING</param-name>
  <param-value>enable</param-value>
 </context-param>
 <context-param>
  <param-name>org.richfaces.SKIN</param-name>
  <param-value>deepMarine</param-value>
 </context-param>
 <filter>
  <filter-name>trinidad</filter-name>
  <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
 </filter>
 <filter>
  <filter-name>openEntityManager</filter-name>
  <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
 </filter>
 <filter>
  <description>Filtro para restringir entrada de usuario</description>
  <filter-name>FiltroUsuario</filter-name>
  <filter-class>br.gov.cofen.intranet.portaria.utils.SegurancaFiltro</filter-class>
 </filter>
 <filter>
  <display-name>RichFaces Filter</display-name>
  <filter-name>richfaces</filter-name>
  <filter-class>org.ajax4jsf.Filter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>trinidad</filter-name>
  <servlet-name>Faces Servlet</servlet-name>
 </filter-mapping>
 <filter-mapping>
  <filter-name>openEntityManager</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 <filter-mapping>
  <filter-name>FiltroUsuario</filter-name>
  <url-pattern>/admin/*</url-pattern>
 </filter-mapping>
 <filter-mapping>
  <filter-name>richfaces</filter-name>
  <servlet-name>Faces Servlet</servlet-name>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
 </filter-mapping>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet>
  <servlet-name>resources</servlet-name>
  <servlet-class>org.apache.myfaces.trinidad.webapp.ResourceServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>resources</servlet-name>
  <url-pattern>/adf/*</url-pattern>
 </servlet-mapping>
 <session-config>
  <session-timeout>-1</session-timeout>
 </session-config>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
  <welcome-file>index.html</welcome-file>
  <welcome-file>index.htm</welcome-file>
  <welcome-file>default.html</welcome-file>
  <welcome-file>default.htm</welcome-file>
  <welcome-file>default.jsp</welcome-file>
 </welcome-file-list>
</web-app>
@Controller("setorController")
@Scope("session")
public class SetorController {
	
	private Setor setor;
	
	private DataModel model;
	
	
	
	@Resource
	private DaoGenerico<Visita, Integer> visitaDao;
		
	@Resource
	private DaoGenerico<Setor, Integer> setorDao;
	

	public SetorController(){}

	public Setor getSetor() {
		return setor;
	}

	public void setSetor(Setor setor) {
		this.setor = setor;
	}

	public DataModel getModel() {
		return model;
	}

	public void setModel(DataModel model) {
		this.model = model;
	}

	public DaoGenerico<Setor, Integer> getSetorDao() {
		return setorDao;
	}

	public void setSetorDao(DaoGenerico<Setor, Integer> setorDao) {
		this.setorDao = setorDao;
	};
	
	public DaoGenerico<Visita, Integer> getVisitaDao() {
		return visitaDao;
	}

	public void setVisitaDao(DaoGenerico<Visita, Integer> visitaDao) {
		this.visitaDao = visitaDao;
	}
	
	public String novoSetor(){
		this.setor = new Setor();
		return "formSetor";
	}
	
	public DataModel getTodos(){
		return model= new ListDataModel(setorDao.todos());
	}
	
	public Setor getSetorParaEditarExcluir(){
		Setor setor = (Setor) model.getRowData();
		return setor;
	}
	
	public String editar(){
		setSetor(getSetorParaEditarExcluir());
		return "formSetor";
	}
	
	public String salvar(){
		
		boolean validaSetor=true;
		
		try {
			
			for(Iterator<?>iter=setorDao.todos().iterator();iter.hasNext();){
				Setor s = (Setor)iter.next();
				if(setor.getNomSetor().equalsIgnoreCase(s.getNomSetor())){
					validaSetor=false;
				}
			}
			//verifica se o nome do setor só inicia com letras
			if(setor.getNomSetor().charAt(0)>=65 && setor.getNomSetor().charAt(0)<=90 || 
					setor.getNomSetor().charAt(0)>=97 && setor.getNomSetor().charAt(0)<=122){
				
				if(validaSetor){
					if(setor.getPkIdSetor()==null){
						setorDao.salvar(setor);
					} else {
						setorDao.atualizar(setor);
					}
					
					FacesUtils.mensInfo("Salvo com sucesso");
					setor = new Setor();
				}else{
					FacesUtils.mensErro("Setor já cadastrado");
				}
			}else{
				FacesUtils.mensErro("Nome do setor deve ser iniciado somente com letras");
			}
			
		} catch (InvalidStateException e) {

			FacesUtils.mensErro("Erro ao cadastrar setor. Erro: "+e.getMessage());
		}
		
		return "sucessoSetor";
	}
	
	public String excluir(){
		
		Setor setor= getSetorParaEditarExcluir();
		
		boolean setorSemVisita=true;
		
		try {
			for(Iterator<?> iter=visitaDao.todos().iterator();iter.hasNext();){
				Visita visita = (Visita)iter.next();
				if(visita.getSetor().getPkIdSetor()==setor.getPkIdSetor()){
					setorSemVisita=false;
				}
			}
			//se setor ainda não possui visitas, o setor pode ser deletado
			if(setorSemVisita){
				setorDao.excluir(setor);
				FacesUtils.mensInfo("Setor deletado com sucesso");
			}
		} catch (Exception e) {
			FacesUtils.mensErro("Setor não pode ser deletado pois possui visitas cadastradas");
		}
		
		return "formSetor";
	}
	

	
	
	

}
L

RESOLVIDO

putz perdi a tarde inteira em fóruns
quando resolvi testar o a4j:commandlink no lucar de <h:commandlink> funcionou certinho
caso alguém esteja com o msmo problema tenta ai
abraço

Criado 1 de maio de 2008
Ultima resposta 27 de set. de 2011
Respostas 2
Participantes 2