gpt4 book ai didi

jsf - 如何在 JSF 中显示我的应用程序的错误?

转载 作者:行者123 更新时间:2023-12-03 07:14:48 25 4
gpt4 key购买 nike

在我的 JSF/Facelets 应用程序中,这是我的表单部分的简化版本:

<h:form id="myform">
<h:inputSecret value="#{createNewPassword.newPassword1}" id="newPassword1" />
<h:message class="error" for="newPassword1" />
<h:inputSecret value="#{createNewPassword.newPassword2}" id="newPassword2" />
<h:message class="error" for="newPassword2" />
<h:commandButton value="Continue" action="#{createNewPassword.continueButton}" />
</h:form>

我希望能够根据 continueButton() 方法中发生的情况将错误分配给特定的 h:message 标记。 newPassword 和 newPassword2 需要显示不同的错误。验证器不会真正起作用,因为将传递结果(来自数据库)的方法是在 continueButton() 方法中运行的,并且运行两次的成本太高。

我无法使用 h:messages 标记,因为页面有多个位置需要显示不同的错误消息。当我尝试此操作时,页面显示每条消息的重复项。

我尝试将此作为最佳猜测,但没有运气:

public Navigation continueButton() {
...
expensiveMethod();
if(...) {
FacesContext.getCurrentInstance().addMessage("newPassword", new FacesMessage("Error: Your password is NOT strong enough."));
}
}

我错过了什么?任何帮助将不胜感激!

最佳答案

FacesContext.addMessage(String, FacesMessage)需要组件的clientId不是而是id。如果您想知道为什么,请考虑将一个控件作为数据表的子项,为每行使用相同的控件标记出不同的值 - 可能会为每行打印不同的消息。 id 始终相同; clientId 每行都是唯一的。

因此“myform:mybutton”是正确的值,但对其进行硬编码是不明智的。查找将减少 View 和业务逻辑之间的耦合,并且是一种适用于 portlet 等限制性更强的环境的方法。

<f:view>
<h:form>
<h:commandButton id="mybutton" value="click"
binding="#{showMessageAction.mybutton}"
action="#{showMessageAction.validatePassword}" />
<h:message for="mybutton" />
</h:form>
</f:view>

托管 bean 逻辑:

/** Must be request scope for binding */
public class ShowMessageAction {

private UIComponent mybutton;

private boolean isOK = false;

public String validatePassword() {
if (isOK) {
return "ok";
}
else {
// invalid
FacesMessage message = new FacesMessage("Invalid password length");
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(mybutton.getClientId(context), message);
}
return null;
}

public void setMybutton(UIComponent mybutton) {
this.mybutton = mybutton;
}

public UIComponent getMybutton() {
return mybutton;
}
}

关于jsf - 如何在 JSF 中显示我的应用程序的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/315804/

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