Ola Pessoal
Seguinte, eu tenho uma tabela, que tem um botão pra adicionar linha e outro botao pra editar as linhas que jah estão na tabela…
e gostaria de na hora que clico em salvar alterações…adicionar em duas lista …uma para dados criados e outra para os dados que sao update
mas nao estou conseguindo…nao sei o que fazer…
segue abaixo o codigo da view:
<ui:composition template="./template.xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<ui:define name="content">
<a4j:region>
<ui:insert name="aliveBean">TODO Bean to keep alive</ui:insert>
<rich:panel>
<div id="panelFade" >
<h:outputText styleClass="headerCreate"
value="#{rsc.register} #{p}" />
</div>
<div id="componentCrud">
<hr/>
<a4j:form id="formComponent">
<h:panelGrid columns="3"
style="position: relative;
margin: auto;
padding-top: 15px;">
<h:outputLabel for="txtDescription"
value="#{rsc.description}:" />
<h:inputText id="txtDescription"
onfocus="showHideComponent('cmbCRUDHint')"
size="60"
value="#{controller.descriptionSearch}"/>
<a4j:commandButton action="#{controller.actSearch}"
ajaxSingle="false"
immediate="true"
onclick="Richfaces.showModalPanel('panelLoading')"
oncomplete="Richfaces.hideModalPanel('panelLoading')"
reRender="resultTable"
type="submit"
value="#{rsc.search}"/>
<div class="clear"/>
<div class="clear"/>
</h:panelGrid>
<div id="cmbCRUDHint"
class="hint">#{rsc.toCheckDataRegisteredUseSearchWithEmptyDescription}
</div>
<rich:messages ajaxRendered="true"
globalOnly="true"
styleClass="success" />
<rich:message ajaxRendered="true"
for="txtDescriptionSearch"
styleClass="error"/>
<rich:panel>
<f:facet name="header" id="headertablecrud">
<h:panelGrid columns="3">
<a4j:commandLink action="#{controller.actAddRow}"
ajaxSingle="false"
immediate="true"
styleClass="addnew"
reRender="panelField"
value="#{rsc.add} #{p}"
type="submit"/>
<a4j:commandLink action="#{controller.actSaveUpdate}"
ajaxSingle="false"
immediate="true"
styleClass="saveadd"
value="#{rsc.saveUpdate}"
type="submit"/>
</h:panelGrid>
</f:facet>
<hr/>
<rich:dataTable id="resultTable"
columnClasses="plainColumn, editColumn"
rowClasses="lineB, lineA"
headerClass="plainTableHeader"
reRender="ds"
rows="10"
value="#{controller.resultData}"
var="row"
style="width: 100%;">
<rich:column>
<f:facet name="header" >
<h:outputText value="Descrição" />
</f:facet>
<h:panelGroup layout="block"
id="panelField">
<h:outputText converter="plainObjectConverter"
rendered="#{row.readOnly}"
value="#{row.persistent}"/>
<h:inputText id="rowInput"
rendered="#{row.updating or row.creating}"
value="#{row.persistent[editField]}"
style="width: 50%;"
size="60"
required="true">
<rich:messages ajaxRendered="true"
for="rowInput"
styleClass="error"/>
</h:inputText>
</h:panelGroup>
</rich:column>
<rich:column>
<a4j:commandLink action="#{controller.actSelectPersistent}"
ajaxSingle="true"
immediate="true"
rendered="#{row.readOnly}"
reRender="panelField"
styleClass="edit"
title="#{rsc.clickToEdit}"
value=""/>
<a4j:commandLink action="#{controller.actRemoveRow}"
ajaxSingle="true"
rendered="#{row.creating}"
immediate="true"
reRender="panelField"
styleClass="cancel"
title="#{rsc.clickToCancel}"
value=""/>
</rich:column>
</rich:dataTable>
<hr/>
</rich:panel>
<rich:datascroller for="resultTable"
id="ds"
onpagechange="Richfaces.showModalPanel('panelLoading')"
oncomplete="Richfaces.hideModalPanel('panelLoading')"
renderIfSinglePage="true"
align="left"/>
</a4j:form>
</div>
<rich:messages ajaxRendered="true"
globalOnly="true"
styleClass="error"/>
<rich:messages ajaxRendered="true"
globalOnly="true"
styleClass="success"/>
</rich:panel>
</a4j:region>
</ui:define>
</ui:composition>
e o bean
public abstract class Controller<T extends Persistent>
implements Serializable {
private String descriptionSearch;
private DataModel resultDataModel;
private List<PersistentRowWrapper<T>> persistentRowWrapperList;
private List<PersistentRowWrapper<T>> persistentListTemporaryCreat = new ArrayList<PersistentRowWrapper<T>>();
private List<PersistentRowWrapper<T>> persistentListTemporaryUpdate = new ArrayList<PersistentRowWrapper<T>>();
public AbstractPersistentController() {
this.persistentRowWrapperList = new ArrayList<PersistentRowWrapper<T>>();
}
protected abstract List<T> getResultList();
protected abstract <S extends GenericService> S getService();
protected abstract T createNewPersistent();
public String getDescriptionSearch() {
return descriptionSearch;
}
public void setDescriptionSearch(String descriptionSearch) {
this.descriptionSearch = descriptionSearch;
}
public DataModel getResultData() {
return resultDataModel;
}
public void actSaveUpdate() {
for (PersistentRowWrapper<T> persistentRowWrapper : persistentRowWrapperList)
System.out.println(persistentRowWrapper.getPersistent());
/*try {
if (persistentListTemporaryCreat != null) {
for (PersistentRowWrapper persistentRowWrapper : persistentListTemporaryCreat) {
System.out.println("Entrou em actSaveUpDate no save");
getService().validate(persistentRowWrapper.getPersistent());
getService().save(persistentRowWrapper.getPersistent());
FacesUtils.getInstance().addMessage(ResourceUtils.getKeyValue("registeredSuccessfully", FacesUtils.getInstance().getCurrentHttpRequestLocale()));
}
}
if (persistentListTemporaryUpdate != null) {
for (PersistentRowWrapper persistentRowWrapper : persistentListTemporaryUpdate) {
getService().validate(persistentRowWrapper.getPersistent());
getService().merge(persistentRowWrapper.getPersistent());
FacesUtils.getInstance().addMessage(ResourceUtils.getKeyValue("changedSuccessfully", FacesUtils.getInstance().getCurrentHttpRequestLocale()));
}
}
} catch (ValidationException ex) {
FacesUtils.getInstance().addMessage(ResourceUtils.getKeyValue(ex.getMessageKey(), FacesUtils.getInstance().getCurrentHttpRequestLocale()));
}
*
*/
}
public void actSearch() {
List<T> list = getResultList();
if (list != null
&& !list.isEmpty()) {
persistentRowWrapperList.clear();
for (T persistent : list) {
persistentRowWrapperList.add(new PersistentRowWrapper<T>(persistent, true));
}
resultDataModel = new ListDataModel(persistentRowWrapperList);
} else {
resultDataModel = null;
FacesUtils.getInstance().addMessage(ResourceUtils.getKeyValue("nothingWasFound", FacesUtils.getInstance().getCurrentHttpRequestLocale()));
}
}
public void actAddRow() {
persistentRowWrapperList.add(0, new PersistentRowWrapper<T>(createNewPersistent(), false));
resultDataModel = new ListDataModel(persistentRowWrapperList);
}
public void actRemoveRow() {
PersistentRowWrapper<T> persistentRowWrapper = (PersistentRowWrapper<T>) resultDataModel.getRowData();
for (PersistentRowWrapper<T> rowWrapper : persistentListTemporaryUpdate) {
if(persistentRowWrapper.getPersistent().getId().equals(rowWrapper.getPersistent().getId()))
persistentListTemporaryUpdate.remove(rowWrapper);
}
}
public void actSelectPersistent() {
PersistentRowWrapper<T> persistentRowWrapper = (PersistentRowWrapper<T>) resultDataModel.getRowData();
persistentRowWrapper.setUpdating();
persistentListTemporaryUpdate.add(persistentRowWrapper);
}
}
Entao pessoal…eu fiz um teste ali no metodo actSaveUpdate pra mostrar a lista…mas nao grava na lista…se eu adicionar um linha ele adiciona a linha normalmente…mas nao grava na lista…mostra null quando dou um system.
Agradeço pela Ajuda!