Pessoal, tenho uma lista num dataTable e para cada registro dessa lista quero poder editar seu campo correspondente, mas não to conseguindo pegar o objeto em questão (alarm).
Preciso passar algum parametro para o MB? Como minha lista alarmes é um @DataModel e o objeto alarm é um @DataModelSelection achei que não precisasse, vi algo sobre f:setPropertyActionListener mas não entendi como seria o target="#{}" e o value="#{}" para o meu caso, e nem como recupero no MB. Segue o código:
<rich:panel>
<f:facet name="header">Central de Alarmes: #{alarms.size} resultado(s)</f:facet>
<div class="results" id="alarmList">
<h:form id="alarm">
<rich:dataTable id="alarmList" var="_alarm"
value="#{alarms}" rows="15" reRender="ds" rowKeyVar="row">
<rich:column>
<f:facet name="header">Ponto</f:facet>
<h:outputText value="#{_alarm.measure.point.name}" />
</rich:column>
<rich:column styleClass="action">
<f:facet name="header">Acao</f:facet>
<a:commandButton ajaxSingle="true" id="editlink" image="/img/edit.gif"
oncomplete="#{rich:component('editPanel')}.show()"
reRender="panelGrid">
<rich:toolTip for="editlink" value="Editar" />
</a:commandButton>
// MODAL PANEL
<rich:modalPanel id="editPanel" autosized="true" rendered="true">
<f:facet name="header">
<h:outputText value="Adicionar Comentario" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/img/close.png" id="hidelink"
styleClass="hidelink" />
<rich:componentControl for="editPanel" attachTo="hidelink"
operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<h:panelGrid columns="1">
<a:outputPanel>
<h:panelGrid columns="2" id="panelGrid">
<h:outputText value="Comentario" />
<h:inputText value="#{alarmAction.alarm.comment}" />
// já tentei passar como "_alarm.comment" mas não deu certo também
</h:panelGrid>
</a:outputPanel>
<a:commandButton value="Salvar"
action="#{alarmAction.saveAlarm}"
oncomplete="#{rich:component('editPanel')}.hide();" />
</h:panelGrid>
</h:form>
</rich:modalPanel>
</rich:column>
</rich:dataTable>
</h:form>
</div>
</rich:panel>
@Name("alarmAction")
@Scope(ScopeType.CONVERSATION)
public class AlarmAction {
@DataModel
private List<Alarm> alarms;
@DataModelSelection
@Out(required=false)
private Alarm alarm;
@Factory("alarms")
public void listAlarms() {
alarms = entityManager.createQuery("select a from Alarm a")
.getResultList();
}
public String saveAlarm() {
// como pego o alarm.comment aqui?
alarm.setSolutionDatetime(new Date());
entityManager.merge(alarm);
return "saveAlarm";
}
}
Lembrando que o modal tá abrindo normalmente, mas quando submeto nada acontece, inclusive o modal continua aberto.
Outro detalhe é que se tirar o modal panel do dataTable atualiza o primeiro registro da lista, ou seja, meu problema realmente é conseguir pegar o objeto da linha.
Abraços!