Ho una pagina CRUD che mostra i dati da una query (un elenco di oggetti di dominio) in un datatable Primefaces.Keep <p:dialog> aperto quando la convalida non è riuscita
<p:dataTable
id="negozi"
var="n"
value="#{nController.theListFromQuery}"
rowKey="#{n.id}"
selection="#{nController.selected}"
selectionMode="single">
<p:column headerText="Field1">
<h:outputText value="#{n.f1}" />
</p:column>
<p:column headerText="Field2">
<h:outputText value="#{n.f2}" />
</p:column>
<p:column style="width:4%">
<p:commandButton
actionListener="#{nController.prepareEdit(n)}"
update=":editDialogId"
oncomplete="editDialog.show()"
value="Edit" />
</p:column>
...
Cliccando sul pulsante Modifica una finestra verrà mostrata:
<p:dialog
header="Edit N"
widgetVar="editDialog"
id="editDialogId">
<h:form id="formDialog">
<h:panelGrid id="editDialogTable" columns="2" cellpadding="10" style="margin:0 auto;">
<p:outputLabel for="field1" value="F1:" />
<p:inputText id="field1" value="#{nController.selected.f1}" />
<p:outputLabel for="field2" value="F2:" />
<p:inputText id="field2" value="#{nController.selected.f2}" />
<p:commandButton
value="Confirm"
actionListener="#{nController.doEdit}"
update=":form"
oncomplete="editDialog.hide()"
rendered="#{nController.selected.id!=null}" />
...
Funziona. Ora voglio fare di F1 un campo obbligatorio.
Aggiungo l'attributo "richiesto" al campo di testo di input e cosa succede?
Quando provo a confermare la forma senza il campo obbligatorio, l'entità non è editato (che è di destra), ma la finestra è chiusa (che non è giusto!)
Quando riapro la finestra posso vedere il rosso evidenziare il campo richiesto (e non valido).
Quello che voglio è impedire la chiusura della finestra di dialogo se il modulo non è valido.
Devo scrivere qualche JS o JSF mi aiuterà?
Come è "il più pulito"? Stai raccomandando una funzione a 11 righe su un'opzione per aggiungere semplicemente un controllo variabile facilmente disponibile? – kolossus
beh, ci vediamo punto .. ma la cosa qui è fare un "nascondiglio trasparente"; Voglio dire ... tu fai sempre un nascondiglio normale() indipendentemente dal fatto che sia convalidato o meno (piuttosto che testare qualche volta); chiedi di nascondere ovunque come: oncomplete = "editDialog.hide()" e non preoccuparti se la convalida fallirà o meno; sarà gestito "sotto" ... –