gpt4 book ai didi

java - 验证失败后重置 selectOneMenu 表单值

转载 作者:行者123 更新时间:2023-12-01 05:18:18 25 4
gpt4 key购买 nike

我们正在尝试使用 selectOneMenu 作为业务实体的“状态”控件。下拉列表中有一个状态列表。当用户选择状态时,我们运行一组复杂的业务规则来确定是否可以在业务实体上设置所选状态。如果不是,我们会写出一条消息,说明原因,并禁止设置状态。这一切在 JSF 生命周期内运行良好,只是我想在验证失败之前将下拉列表重置为以前的状态(也称为当前状态)。因此,如果我从状态 A 切换到状态 B,但失败,我想将表单控件重置为状态 B。

小面代码

<p:selectOneMenu id="statusMenu"
binding="#{mybean.statusMenu}"
converter="myConverter"
value="#{mybean.statusValue}">

<f:event type="preValidate" listener="#{mybean.validateStatus}"/>
<p:ajax update="statusMenu :someForm :someOtherForm" />

<f:selectItems value="#{mybean.statusList}"
var="status"
itemLabel="#{status.statusText}"
itemValue="#{status}">
</f:selectItems>
</p:selectOneMenu>

支持 bean 验证菜单

public void validateStatus (ComponentSystemEvent e)
{
String submittedStatus = ((MyStatus)getStatusMenu().getValue()).getStatusText();

if(submittedStatus.equals("someStatus"))
{
//do validation
boolean valid = doBusinessStatusValidationLogicStuff()

if(!valid)
{
//a combination of junk that attempts to reset the form value, or do *something* to it
getStatusMenu().resetValue();
getStatusMenu().setSubmittedValue(null);
getStatusMenu().setValue(null);
getStatusMenu().setLocalValueSet(false);

FacesMessage errorMessage = new FacesMessage(severity, summary, detail);
context.addMessage(null, "you fail");
context.isValidationFailed();
context.renderResponse();
}
}
}

我可以在调试器中看到绑定(bind)组件的值设置为我想要的值,但它根本不更新表单控件。我错过了什么?

最佳答案

最终成为一个 equals/hashcode 问题。所以一定要检查那里!

关于java - 验证失败后重置 selectOneMenu 表单值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10856479/

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