[RESOLVIDO]Arraylist de Objetos para DataTable

2 respostas
rapha.java

Boa Tarde, to parado nessa dúvida aqui, é o seguinte:

Criei uma classe com dois atributos "Descricao" e "Status" criei os Getters e Stters, e na classe managed Bean eu instaciei um objeto do tipo "JustificativaModal"(classe que criei com as Strings), no metodo "getlistaJustificativa" eu instaciei o obejto da seguinte forma:
public List<JustificativaModel> getListaJustificativa() {

		for (int i = 0; i < 3; i++) {
			justificativaModel = new JustificativaModel();
			justificativaModel.setDescricao("Descrição");
			justificativaModel.setStatus("Ativo");
			listaJustificativa.add(justificativaModel);
		}
		return listaJustificativa;
	}
Mas dessa forma com o For ele adiciona tudo igual, como faço para incluir mais dados de uma vez sem ter que instanciar varios objetos (Jm1, JM3.....)? :?: :?: :?: :?: E também quando listados na rich:DataTable eles serao links e quando clicados abre um ModalPanel para modificar, como faco esta pesqusa no arraylist e modifico apenas o link selecionado?? :?: :?: :?: Obrigado desde já!

2 Respostas

J

Para adicionar um objeto na lista, ele terá que estar instanciado (você não pode inserir uma coisa que não existe dentro da lista…).

Acredito que em seu caso, o melhor seria ter estes dados dentro de um banco de dados.
Assim, você teria uma entidade (Justificativa) e seus atributos.

Para aprendizado, sugiro a criação de um DAO (Data Access Object), em seu caso, uma classe JustificativaDAO, que faria as operações de inclusão, busca, edição e deleção de suas justificativas dentro do banco de dados.

Já para a parte do RichFaces (o dataTable), você pode usar um a4j:commandLink com uma taglib <f:setPropertyActionListener> para alterar somente a justificativa desejada.

Por exemplo:

<rich:dataTable value="#{seuBean.getListaJustificativa}" var="jus" id="tbljustificativas" iterationStatusVar="it" width="100%">
	<rich:column>
		<f:facet name="header">
			<h:outputText value="DESCRIÇÃO" />
		</f:facet>
		<h:outputText value="#{jus.descricao}" />
	</rich:column>
	<rich:column>
		<f:facet name="header">
			<h:outputText value="STATUS" />
		</f:facet>
		<h:outputText value="#{jus.status}" />
	</rich:column>
	<rich:column>
		<a4j:commandLink value="ALTERAR" render="editGrid" execute="@this" oncomplete="#{rich:component('editPane')}.show()">
			<a4j:param value="#{it.index}" assignTo="#{seuBean.currentJustificativaIndex}" />
			<f:setPropertyActionListener target="#{seuBean.justificativaEditada}" value="#{jus}" />
		</a4j:commandLink>
	</rich:column>
<rich:dataTable>


<rich:popupPanel header="Detalhes da justificativa a ser editada:" id="editPane" domElementAttachment="parent" autosized="true">
	<h:panelGrid columns="3" id="editGrid">
		<h:outputText value="Justificativa a ser editada:" />
		<h:outputText value="#{seuBean.justificativaEditada.descricao}" />
		<h:panelGroup />
		<h:outputText value="Digite a nova justificativa: " />
		<h:inputText value="#{seuBean.justificativaEditada.descricao}" />
	</h:panelGrid>
	<a4j:commandButton value="Salvar" action="#{seuBean.onSalvarClick}" render="tblJustificativas" execute="editPane" oncomplete="if (#{facesContext.maximumSeverity==null}) {#{rich:component('editPane')}.hide();}" />
	<a4j:commandButton value="Cancelar" onclick="#{rich:component('editPane')}.hide(); return false;" />
</rich:popupPanel>

Não se esqueça de colocar o nome de seu Bean (seuBean, no exemplo).
Não se esqueça também de implementar a ação “onSalvarClick” dentro do Bean.

A ação onSalvarClick irá chamar seu DAO para gravar a alteração dentro do banco.
A variável currentJustificativaIndex é do tipo int e deve existir dentro de seu Bean.
A variável justificativaEditada é do tipo JustificativaModel e também deve existir dentro de seu Bean.

Lembre-se: não é possível adicionar algo que não existe dentro de uma lista, logo terá de existir as justificativas.

Espero ter ajudado.

rapha.java

Conseguir resolver, com ajuda mas consegui, eu havia esquecido de colocar o keepAlive na minha pagina, ele serve par a manter a instacia do bean, assim ele não zerava a lista toda vez

Criado 30 de agosto de 2011
Ultima resposta 31 de ago. de 2011
Respostas 2
Participantes 2