Spring Web Flow 및 JSF를 사용하여 한 페이지의 여러 양식 검증
-
06-07-2019 - |
문제
스프링 웹 흐름에서 JSF를 사용하여 두 가지 다른 형식을 검증하려고합니다.
문제는 validateallonclick이 페이지의 모든 Clientside 유효성 검사기를 발사하는 것으로 보인다는 것입니다.
ProcessID를 양식으로 설정하거나 입력 ID 또는 입력 ID 또는 유효성 검사자 ID를 확인하려는 형태로 클라이언트 측 유효성 검사기가 발생하지 않으면 ValidAleLonClick도 제거 할 경우 해고되지 않습니다. 제출 버튼에 validateallonclick을 유지하고 processID를 설정하면 모든 클라이언트 측 유효성 검사기가 발사됩니다.
스프링 웹 흐름과 여러 형태의 JSF를 사용하여 클라이언트 측 유효성 검사를 어떻게합니까?
<ui:define name="content">
<div id="main-content">
<div id="system">
<div class="leftcolumn">
<ui:fragment>
<h:form id="testForm">
<div class="admin-title">User Management</div>
<div class="system-panel"><span class="header">Add a new
user</span>
<table>
<tr>
<td><h:outputLabel for="first_names" value="First Name:" /></td>
<td><sf:clientTextValidator required="true"
invalidMessage="Please enter user\'s first name " id="requiredFirstName">
<h:inputText id="first_names" required="true" />
</sf:clientTextValidator></td>
</tr>
<tr>
<td><h:outputLabel for="last_name" value="Last Name:" /></td>
<td><sf:clientTextValidator required="true"
invalidMessage="Please enter user\'s last name " id="requiredLastName">
<h:inputText id="last_name" required="true" />
</sf:clientTextValidator></td>
</tr>
<tr>
<td><h:outputLabel for="email" value="Email:" /></td>
<td><sf:clientTextValidator required="true"
invalidMessage="Please enter user\'s e-mail address" id="requiredEmail">
<h:inputText id="email" required="true" />
</sf:clientTextValidator></td>
</tr>
<tr>
<td>Set password to last name:<br />
(in lower case)</td>
<td><h:selectBooleanCheckbox id="init_password" value="true" />
</td>
</tr>
<tr>
<td colspan="2" align="right">
<div id="password" class='hide_password'><h:outputLabel
for="password" value="Password:" /> <h:inputText id="password" />
</div>
</td>
</tr>
</table>
<sf:validateAllOnClick>
<sf:commandButton id="addNewUserAction" action="addUser"
value="Add New User" processIds="requiredEmail, requiredLastName, requiredFirstName, email" />
</sf:validateAllOnClick>
</div>
</h:form> </ui:fragment>
<ui:fragment>
<h:form id="akeemForm">
<div class="system-panel"><span class="header">Reset
User's Password</span>
<table>
<tr>
<td><h:outputLabel for="resetPasswordEmail" value="Email:" /></td>
<td><sf:clientTextValidator required="true"
invalidMessage="Please enter user\'s e-mail address" id="requiredEmail1" >
<h:inputText id="resetPasswordEmail" />
</sf:clientTextValidator></td>
</tr>
<tr>
<td><h:outputLabel for="resetPasswordPassword"
value="Password:" /></td>
<td><sf:clientTextValidator required="true"
invalidMessage="Please enter user\'s new password" id="requiredEmail2" >
<h:inputText id="resetPasswordPassword" />
</sf:clientTextValidator></td>
</tr>
<tr>
<td><h:outputLabel for="resetPasswordNotify"
value="Email User Their New Password:" /></td>
<td><h:selectBooleanCheckbox id="resetPasswordNotify"
value="true" /></td>
</tr>
</table>
<sf:commandButton id="changeUserPasswordAction"
processIds="*" action="changeUserPassword"
value="Reset Password" />
</div>
</h:form>
</ui:fragment> <h:form>
<div class="system-panel"><span class="header">Manage
User Profile</span>
<table width="100%">
<tr>
<td><h:outputLabel value="Search" /></td>
<td><h:inputText /></td>
</tr>
</table>
<h:commandButton action="searchUser" value="Search" /></div>
</h:form></div>
<div class="rightcolumn">
<div class="admin-title">Title Management</div>
<h:form>
<div class="system-panel"><span class="header">Add A
Title</span> <br />
<br />
<h:commandButton id="addTitle"
value='Start Process for Adding a Title' action="addTitle" /></div>
</h:form>
<div class="system-panel"><span class="header">Edit A
Title</span> <!--<h:form>-->
<table width="100%">
<tr>
<td class='td_name'>Book title:</td>
<td><h:form>
<h:selectOneMenu id="currentSelectedBook"
value="#{bookSelector.selectedBook}">
<f:selectItems value="#{bookSelector.options}" />
</h:selectOneMenu>
<h:commandButton id="cmdButton" value="Go to book Dashboard"
action="updateBook" />
</h:form></td>
</tr>
</table>
<!-- <h:commandButton value="Go to the Edit Title interface" action="updateBook" />
</h:form> --></div>
<h:form
onsubmit="return confirm('Are you sure you want to delete this book?')">
<div class="system-panel"><span class="header">Delete A
Title</span>
<table width="100%">
<tr>
<td class='td_name'>Book title:</td>
<td>Book Select Here</td>
</tr>
</table>
<h:commandButton value="Delete" action="deleteTitle" /></div>
</h:form> <br />
<div class="system-panel"><span class="header">Title
Reports</span>
<ul>
<li>Titles without ISBNs or Billing Divisions - <h:form>
<h:commandLink value="View Report" action="missingBillingIsbn" />
</h:form></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
</ui:define>
</ui:composition>
해결책
모든 양식을 t : subforms로 만들어 간단한 리팩토링을 수행 할 수 있습니다 (T 태그는 JSF와 잘 작동하는 Tomahawk 라이브러리를 참조하고 이러한 모든 하위 형태를 동봉합니다.
이 작업을 마치면 T : CommandButton을 사용하여 선택적 하위 형태를 호출 할 수 있습니다.
이 명령문은 하나의 버튼을 사용하여 여러 양식을 (선택적으로) 제출하는 데 도움이됩니다. 다음 문서를보십시오.http://myfaces.apache.org/tomahawk-project/tomahawk12/tagdoc/t_subform.html
또한 JSF에서 구성 요소를 검증하기 위해 Requiered = "True"속성을 사용하는 것을 잊지 마십시오. 그렇지 않으면 유효성 검사가 실제로 시작되지 않습니다.
도움이되기를 바랍니다.