gpt4 book ai didi

validation - 验证失败时如何实现post-redirect-get

转载 作者:行者123 更新时间:2023-12-04 02:15:59 26 4
gpt4 key购买 nike

我在 View “createDbUser.xhtml”中有一个表单,其中包含一些输入文本和验证,如下所示:

<h:form>
<h:inputText id="user_name" value="#{dbUserManager.userName}" required="true" requiredMessage="User name is required." />
<h:inputSecret id="password" value="#{dbUserManager.password}" required="true" requiredMessage="Password is required." />
<h:commandButton id="create_user" value="Create user" action="#{dbUserManager.createUser()}" />
</h:form>

dbUserManger 是一个带有 createUser() 的 viewScoped 托管 bean,如下所示:

public String createUser()
{
...
// here I do some checks and add the new user to database
...

return "/restricted/createDbUser.xhtml?faces-redirect=true";
}

当我在某些验证失败时按下浏览器的刷新按钮(例如,我没有输入密码或用户名)时,我得到的是“确认重新提交表单”而不是预期的行为,即重新加载页面并清除输入.

我已经阅读了 post-redirect-get 模式,这就是为什么我将带有“faces-redirect=true”参数的 return 语句添加到 createuser() 的结果中的原因。

我想当验证失败时,我们永远不会到达 createuser() 和 return 语句。这就是这个问题的原因。但是我不知道怎么解决。

如果有人能帮助解决这个问题,那就太好了。

谢谢

最佳答案

你是对的:

当在 JSF LifeCycles 验证阶段在服务器端识别出验证错误时,您的操作方法将永远不会被调用(稍后在调用阶段)。

我认为可能的解决方案是:尝试在客户端进行验证 - 例如检查登录/密码是否存在,这可以通过 h:commandButtons onclick 属性触发的 javascript 来实现。我不确定您是否在 JSF2 之上使用任何 *Faces-framework,但是例如Richfaces4 还允许在不更改任何代码的情况下进行客户端验证。

另一种可能的解决方案可能是通过 AJAX 发送表单,更改

<h:commandButton action="#{dbUserManager.createUser()}" />

类似于

<h:commandButton action="#{dbUserManager.createUser()}">
<f:ajax execute="@form" render="@all" />
</h:commandButton>

在这里,您可能需要弄清楚如何在正确登录的情况下管理重定向到另一个屏幕。

希望这些想法可以插入您进一步实现目标...

关于validation - 验证失败时如何实现post-redirect-get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045786/

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