我一直在学习JSF,即使是弱者,所以我对此非常陌生。我已经发现了一个“问题”......好吧,这实际上并不是什么大问题,而是更多的化妆品问题。
我已经制作了基本表单,用一些验证标签注册用户(参见上面的代码)。一切正常,但我也想通过JavaScript使用客户端控制。我已经发现我可以编写自己的JavaScript检查功能 - 但这不是我想要的。我已经在验证标签中定义了验证规则,这就是为什么我认为手动编写代码是愚蠢的,当像JSF这样的好框架能够自动完成大部分这些事情时。我还发现Sun有意从JSF中删除了JavaScript自动验证。
所以我的问题是:有没有办法让JSF在表单提交时自动使用它们生成JavaScript函数(使用f:validate info)?另外,我使用PrimeFaces,是否可以使用PrimeFaces实现这一目标?
以下是我所制作表格的代码:
<h:form>
<table>
<tr>
<th><label for="registration-email">#{usersTexts.email}:</label></th>
<td>
<h:inputText value="#{userRegistry.newUser.email}" id="registration-email" validatorMessage="#{msg.invalidEmail}" maxlength="100">
<f:validateRegex pattern="^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$" />
</h:inputText>
</td>
</tr>
<tr>
<th><label for="registration-name">#{usersTexts.name}:</label></th>
<td>
<h:inputText value="#{userRegistry.newUser.name}" id="registration-name" validatorMessage="#{formsTexts.field} #{usersTexts.name} #{msg.isEmpty}" maxlength="100">
<f:validateRequired />
</h:inputText>
</td>
</tr>
<tr>
<th><label for="registration-password1">#{usersTexts.password}:</label></th>
<td>
<h:inputSecret value="#{userRegistry.newUser.password}" binding="#{password}" id="registration-password1" validatorMessage="#{formsTexts.field} #{usersTexts.password} #{msg.isEmpty}">
<f:validateRequired />
</h:inputSecret>
</td>
</tr>
<tr>
<th><label for="registration-password2">#{usersTexts.passwordAgain}:</label></th>
<td>
<h:inputSecret id="registration-password2" validatorMessage="#{msg.passwordsNotEqual}">
<f:validateLength minimum="#{user.MIN_PASSWORD_LENGTH}" />
<f:validator validatorId="equality" />
<f:attribute name="matchAgainst" value="#{password}" />
</h:inputSecret>
</td>
</tr>
<tr>
<td colspan="2">
<p:captcha immediate="true" validatorMessage="#{msg.wrongCaptcha}" requiredMessage="#{formsTexts.captcha} #{msg.isEmpty}" />
</td>
</tr>
<tr>
<td colspan="2" class="submit_row"><h:commandButton value="#{usersTexts.register}" action="#{userRegistry.register}" /></td>
</tr>
</table>
</h:form>
答案 0 :(得分:0)
JSF规范未定义或提供任何本机JavaScript验证。
如果您想要的只是即时反馈,只需输入
即可<f:ajax event="blur" render="messages" />
在有问题的输入字段和
中<f:ajax execute="@form" render="@form" />
在命令按钮内。