jsf-2 - 如何自定义 Primefaces' Growl 所需的验证消息

标签 jsf-2 input primefaces messages requiredfieldvalidator

在 JSF 2.0 中,如何覆盖所需的消息?我正在使用 Primefaces。这是我的代码:

<h:body>
    <p:growl id="growl" showDetail="true"/>
    <h:panelGroup layout="block" styleClass="login-div">
        <h:form id="login">
            <p:panel header="Login">
                <h:panelGrid columns="2">
                    <p:outputLabel for="username" value="Username" />
                    <p:inputText id="username" value="#{authController.username}"
                        autocomplete="off" required="true"
                        requiredMessage="Username is required" />
                    <p:outputLabel for="password" value="Password" />
                    <p:password id="password" value="#{authController.password}"
                        autocomplete="off" required="true"
                        requiredMessage="Password is required" />
                </h:panelGrid>
                <p:commandButton id="submit" value="Login"
                    actionListener="#{authController.login}" update=":growl" />
            </p:panel>          
        </h:form>
    </h:panelGroup>
    <p:ajaxStatus styleClass="ajaxLodingStatus">
        <f:facet name="start">
            <p:graphicImage value="/resources/images/loading.gif" />
        </f:facet>
        <f:facet name="complete">
            <p:outputLabel value="" />
        </f:facet>
    </p:ajaxStatus>
</h:body>

现在 Growl 显示:“需要用户名”作为摘要和详细信息 FacesMessage 。密码字段也是如此。

现在从命令按钮的 actionListener 中,当登录尝试失败时,我以我想要的方式显示:
getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid Credential"));

但我想显示“无效输入”作为摘要,“需要用户名”作为详细信息。

如果我从后端验证这两个输入字段并将 FacesMessage 添加为:
if(username == null || username.trim().length() == 0) {
    getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid input", "Username is required."));
}

它显示了我需要的东西。但是这样就不需要在输入组件中指定 required="true" 属性了。

但是我想使用这个 required 属性也想自定义 FacesMessageGrowl 中的显示方式。我怎样才能做到这一点?

更新:

这是我的支持 bean:
@ManagedBean(name = "authController")
@ViewScoped
public class AuthController extends BaseWebController implements Serializable {

    private static final long serialVersionUID = 2894837128903597901L;

    private String username;
    private String password;

    public AuthController() {
        super();
    }

    public void login(ActionEvent event) {
        getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid Credential"));
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

目前 actionaListener 只有在有一些输入时才会触发。否则,当字段为空时,Growl 将显示:

点击登录按钮后:

show-case所示

我想要的是,当输入用户名无法按要求验证时,Growl 将显示:
  • 摘要:无效输入。
  • 详细信息:需要用户名。

  • 对于输入密码:
  • 摘要:无效输入。
  • 详细信息:需要密码。

  • 我怎样才能做到这一点?是否可以?

    最佳答案

    我找到了解决方案:

    我需要自定义验证错误消息。

    我已经创建了 messages.properties 文件,我在其中写了:

    javax.faces.component.UIInput.REQUIRED=Invalid input.
    javax.faces.component.UIInput.REQUIRED_detail={0} is required.
    

    并在 faces-config 中将其注册为:

    com.edfx.adb.common.properties.messages

    我得到了这个:

    我还从输入组件中删除了 requiredMessage 属性。

    一些有用的链接:
  • 另一个 SO thread
  • JSF 2 messages.properties
  • Customize validation error message in JSF 2.0
  • 关于jsf-2 - 如何自定义 Primefaces' Growl 所需的验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13776654/

    相关文章:

    java - Liferay portlet(带有 JSF)- 在重定向期间将参数从一个 bean 传递到另一个 bean

    jsf - JSF 2 中带有参数的自定义转换器

    jquery - 如何在文档准备好后在 .live() 内运行代码?

    javascript - 如何使用 jquery 禁用日历

    java - p :ajax inside h:graphicImage

    jakarta-ee - 如何从一个 ViewScoped bean 访问另一个?

    ajax - 当 ajax 请求验证失败时,如何使用 Primefaces 突出显示 UIInput?

    html - 文本转换 : capitalize; Also affects Placeholder

    javascript - 使用 "placeholder"模仿 "value"attr

    jsf - PF 5.3 折线图无法与 X 字符串值正常工作