[RESOLVIDO] Rich Faces: dataTable no scopo Request

7 respostas
Claudio_Nazzari

Galera,

Estou usando o dataTable e o dataScroller do RichFaces, e estou com o seguinte problema. 
Tenho um xhtml com o dataTable e com um dataScroller que me tras todas as "Cidades" cadastradas, sendo que o ManagedBean esta no escopo [b]session[/b]. Ate aqui o dataTable funciona perfeitamente, mas quando eu mudo o scopo de [b]session[/b] para [b]request[/b], o datascroller nao esta funcionado, e o command link, que existe no dataTable, tambem nao funciona! 
Gostaria de saber se alguem ja passou por esse tipo de problema, se existe alguma forma de tratar isso no RichFaces ou se o dataTable foi desenvolvido apenar para funcionar em [b]session[/b].
Isso ocorre com todos os casos de uso que tenho. Eu preciso alterar o escopo para [b]request[/b], nao so para melhorar a performance, mas porque estou com um problema de "clean" nos campos.

Bom, segue meus codigos:

lstCidade.xhtml

...
	<h:panelGrid columns="1">
		<rich:datascroller align="center" for="vList"/>
		<rich:spacer height="5" />
		<rich:dataTable width="250" height="200" 
		                id="vList" 
		                rows="8" 
		                columnClasses="col" 
		                value="#{cidadeMB.cidadeByName}" var="acidade">
			<f:facet name="header">
				<rich:columnGroup>
					<h:column>
						<h:outputText styleclass="titDataGrid" value="#{bundleMsg.descricao}" />
					</h:column>
					<h:column>
						<h:outputText styleclass="titDataGrid" value="#{bundleMsg.uf}"  />
					</h:column>
					<h:column>
						<h:outputText styleclass="titDataGrid" value="#{bundleMsg.pais}"  />
					</h:column>
					<h:column>
						<h:outputText styleclass="titDataGrid" value="#{bundleMsg.ativo}"  />
					</h:column>
				</rich:columnGroup>
			</f:facet>
			<h:column id="colunaCidade">
				<h:commandLink align="left" styleclass="txtDataGrid" id="linkParaModal" value="#{acidade.dsCidade}" action="#{cidadeMB.doEditItem}" />
			</h:column>
			<h:column id="colunaUf">
				<h:outputText value="#{acidade.uf.dsUf}" />
			</h:column>
			<h:column id="colunaPais">
				<h:outputText value="#{acidade.uf.pais.dsPais}" />
			</h:column>
			<h:column id="colunaFlagAtivo">
				<h:outputText value="#{acidade.dsAtivo}" />
			</h:column>
		</rich:dataTable>
	</h:panelGrid>
...

CidadeManagedBean.java

...
	public String doEditItem() {
		this.cidade = (Cidade) this.cidadeByName.getRowData();
		doSetObject();
		return CommonConstants.GOTO_MNT_CIDADE;
	}
...

itil-nanaged-beans.xml

...
	<managed-bean>
		<managed-bean-name>acaoMB</managed-bean-name>
		<managed-bean-class>
			br.com.hold.itsm.bean.AcaoManagedBean
		</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>
...

7 Respostas

Claudio_Nazzari

nobody? :cry:

Pessoal, para quem usa o RichFaces, voces usam no scopo request ou session?

falvesti

Cara na aplicação que estou desenvolvendo está funcionando perfeitamente no escopo request.

O datatable e o datascroller estão dentro do mesmo form?

[]´s

Claudio_Nazzari

falvesti:
Cara na aplicação que estou desenvolvendo está funcionando perfeitamente no escopo request.

O datatable e o datascroller estão dentro do mesmo form?

[]´s

Ola Falvesti,

Entao, eles estao no mesmo form sim ! voce poderia postar o seu codigo do datatable e datascroller ?

Estou postando todo o meu form
<h:form id="lstCidadeForm">

				<!--Inicio do Layout-->
				<table width="512" height="168" border="0" align="center" cellpadding="0" cellspacing="0">
					<tr>
						<th height="30" colspan="4" align="center" background="../../../images/fundoMenu.png"  scope="col">
							<!--messageTitulo-->
							<h:outputLabel value="#{bundleMsg.cidadeTitulo1}" styleClass="rsTitulo" />
						</th>
					</tr>
					<tr>
						<td width="122" height="30" align="right" bgcolor="#E9E9E9">
							<!--labelDescricao-->
					  		<h:outputLabel value="#{bundleMsg.descricao}" styleClass="rsOutputLabel"/>:
						</td>
						<td width="3" bgcolor="#E9E9E9" ></td>
						<td width="220" height="30" align="left" bgcolor="#E9E9E9">
							<!--inputTextDescricao-->
							<h:inputText value="#{cidadeMB.cidade.dsCidade}" id="dsCidade_" size="35" maxlength="50" styleClass="rsInputText">
							</h:inputText>
							<!-- 
								 
							SuggestionBox 
								
							-->
						  <rich:suggestionbox for="dsCidade_" 
			                                suggestionAction="#{cidadeMB.suggest}"
			                                var="result" 
			                                fetchValue="#{result.dsCidade}"  
			                                minChars="1" 
			                                requestDelay="800" 
			                                width="300" 
			                                nothingLabel="#{bundleMsg.semRegistro}"
			                                height="150" 
			                                border="1" >
								<h:column>
				    				<h:outputText value="#{result.dsCidade}"/>
				           		</h:column>
			          	  </rich:suggestionbox>
						</td>
						<td height="30" align="center" bgcolor="#E9E9E9">
							<!-- btConfirmar -->
							<h:commandButton value="#{bundleMsg.confirmar}" action="#{cidadeMB.doGetSelected}" image="../../../images/btCerto.png"/>
						</td>
					</tr>
					<tr>
						<td height="18" align="center" bgcolor="#FFFFFF" colspan="4">
							<!-- 
							DataGrid - LISTA 
							-->
							<h:panelGrid columns="1">
								<rich:datascroller align="center" for="vList"/>
								<rich:spacer height="5" />
								<rich:dataTable width="250" height="200" 
								                id="vList" 
								                rows="8" 
								                columnClasses="col" 
								                value="#{cidadeMB.cidadeByName}" var="acidade">
									<f:facet name="header">
										<rich:columnGroup>
											<h:column>
												<h:outputText styleclass="titDataGrid" value="#{bundleMsg.descricao}" />
											</h:column>
											<h:column>
												<h:outputText styleclass="titDataGrid" value="#{bundleMsg.uf}"  />
											</h:column>
											<h:column>
												<h:outputText styleclass="titDataGrid" value="#{bundleMsg.pais}"  />
											</h:column>
											<h:column>
												<h:outputText styleclass="titDataGrid" value="#{bundleMsg.ativo}"  />
											</h:column>
										</rich:columnGroup>
									</f:facet>
									<h:column id="colunaCidade">
										<h:commandLink align="left" styleclass="txtDataGrid" id="linkParaModal" value="#{acidade.dsCidade}" action="#{cidadeMB.doEditItem}" />
									</h:column>
									<h:column id="colunaUf">
										<h:outputText value="#{acidade.uf.dsUf}" />
									</h:column>
									<h:column id="colunaPais">
										<h:outputText value="#{acidade.uf.pais.dsPais}" />
									</h:column>
									<h:column id="colunaFlagAtivo">
										<h:outputText value="#{acidade.dsAtivo}" />
									</h:column>
								</rich:dataTable>
							</h:panelGrid>
						</td>
					</tr>
					<tr>
						<td height="18" align="center" bgcolor="#FFFFFF" colspan="4">
							<!--Notificcidade de mensagens de erro-->
							<h:messages showDetail="true" showSummary="false" layout="table" styleClass="rsMessageError" />
							
							<!--Mensagens de Validação de campos-->
							<h:outputText value="#{cidadeMB.errorMessages}" escape="false"/>
						</td>
					</tr>
					<tr>				
						<td height="30" align="center" background="../../../images/fundoMenu.png" bgcolor="#FFFFFF" colspan="4">
							<!-- btRetornar -->
							<h:commandButton value="#{bundleMsg.retornar}" action="#{cidadeMB.goToCadAction}" title="#{bundleMsg.retornar}" image="../../../images/btVoltar.png">	
						    </h:commandButton>
						</td>
					</tr>
				</table>
				<!--Fim do Layout-->

				</h:form>
Luiz_Aguiar

Pode usar tbm:

Claudio_Nazzari

[quote=Luiz Aguiar]Pode usar tbm:

Opa ! Valeu Luiz ! Problema Resolvido !
Coloquei a tag keepAlive nas minhas telas de search !

Obrigado a todos !

P

Claudio Nazzari:

Opa ! Valeu Luiz ! Problema Resolvido !
Coloquei a tag keepAlive nas minhas telas de search !

Obrigado a todos !

Claudio, vc poderia postar como ficou seu código depois que usou a tag a4j:keepAlive ?

É que estou com o mesmo problema que vc teve, mas tentei usar o “keepAlive” e não obtive o resultado esperado. Funcionou para um caso, mas em outro de mesmo teor não funcionou. Como se 2 + 2 em um lugar fosse 4 e em outro não.

Obrigado.

rimolive

Uma outra forma seria no método que popula seu rich:dataTable é adicionar a lista dentro do Map de sessao do JSF:

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("empresas", getListEmpresas());

E depois no xhtml (ou jsp) chamar o atributo da seguinte forma:

<rich:dataTable id="tableEmpresa" binding="#{empresaBean.dataTable}" value="#{sessionScope['empresas']}" var="empresa" align="center" width="60%" rows="10">
Criado 23 de abril de 2008
Ultima resposta 30 de jun. de 2008
Respostas 7
Participantes 5