Primefacesデータテーブルのクエリ(ドメインオブジェクトのリスト)からのデータを表示するCRUDページがあります。
<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>
...
編集ボタンをクリックすると、ダイアログが表示されます。
<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}" />
...
できます。ここで、F1を必須フィールドにします。
inputTextフィールドに「required」属性を追加するとどうなりますか?
必須フィールドなしでフォームを確認しようとすると、エンティティは編集されません(そうです)が、ダイアログは閉じられます(そうではありません!)
ダイアログを再度開くと、必須(および無効)フィールドに赤いハイライトが表示されます。
フォームが無効な場合にダイアログが閉じないようにする必要があります。
JSを作成する必要がありますか、それともJSFが役に立ちますか?