gpt4 book ai didi

jsf - JSF 表单验证失败后滚动到 anchor 或页面底部

转载 作者:行者123 更新时间:2023-12-02 22:30:21 25 4
gpt4 key购买 nike

我在页面底部有一个联系表单,其中包含必填和验证的表单字段。如果验证失败,如何让滚动位置回到页面底部?

我希望此页面在禁用 Javascript 的情况下工作,因此没有 AJAX 解决方案。我有这样的东西:

<a id="contact"></a>
<h:form id="cform">
<h5>Contact!</h5>

<h:outputLabel for="name">Name:
<h:message id="nameMsg" for="name" />
</h:outputLabel>

<h:inputText id="name" value="#{bean.name}" required="true" requiredMessage="Please enter name!" />

<h:outputLabel for="email">Email:
<h:message id="emailMsg" for="email" />
</h:outputLabel>

<h:inputText id="email" value="#{bean.email}" required="true" requiredMessage="Email is required!">
<f:validator validatorId="myValidator" />
</h:inputText>

<h:outputLabel for="comment">Comment:
<h:message id="commentMsg" for="comment" />
</h:outputLabel>

<h:inputTextarea id="comment" value="#{bean.comment}" required="true" requiredMessage="Please enter a comment!"/>

<h:commandButton action="#{bean.go}" id="send" value="send" />
</h:form>

我考虑过在 bean 端进行验证并手动重定向到适当的 anchor ,但这似乎违背了最初使用 JSF 的目的。我认为有一种简单的方法可以做到这一点,但我在谷歌搜索解决方案时遇到了麻烦,因为我可能没有正确地措辞问题。有吗?

最佳答案

您可以使用 <f:event type="postValidate"> 在验证阶段之后立即有一个监听器 Hook 。您可以使用 FacesContext#isValidationFailed() 检查验证是否失败。您可以使用 Flash#setKeepMessages() 让面孔消息在重定向后仍然存在(它们在默认情况下是请求范围的!)。您可以使用 ExternalContext#redirect() 在非操作方法中执行重定向。

所以,总而言之,应该这样做:

<h:form id="cform">
...
<f:event type="postValidate" listener="#{bean.postValidate}" />
</h:form>

与:

public void postValidate() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();

if (context.isValidationFailed()) {
context.getExternalContext().getFlash().setKeepMessages(true);
context.getExternalContext().redirect("contact.xhtml#cform");
}
}

关于jsf - JSF 表单验证失败后滚动到 anchor 或页面底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com