我想在我的JSF Application中显示自定义错误消息。为此,我已经定义了自己的Messages.properties文件,并在faces-config.xml中声明了它的位置。
这是我的Messages.properties文件
javax.faces.component.UIInput.REQUIRED=Invalid input.
javax.faces.component.UIInput.REQUIRED_detail={0} is required.
这是我的faces-config.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns /javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<message-bundle>com.edifixio.common.i18n.Messages</message-bundle>
<resource-bundle>
<base-name>com.edifixio.common.i18n.testBundle</base-name>
<var>tb</var>
</resource-bundle>
</application>
</faces-config>
现在我有xhtml页面
<ui:composition template="/WEB-INF/templates/globalTemplates.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:define name="title">#{tb['REG_PAGE']}</ui:define>
<ui:define name="content">
<h:form>
<h:panelGrid columns="2">
<h:outputLabel value="#{tb['EYN']}"/>
<h:inputText required="true" id="name"/>
<h:outputText value="" />
<h:message for="name" style="color:red"/>
<h:outputLabel value="#{tb['EYA']}"/>
<h:inputText required="true" id="address"/>
<h:outputText value="" />
<h:message for="address" style="color:red"/>
<h:outputLabel value="#{tb['UID']}"/>
<h:inputText id="uid" required="true"/>
<h:outputText value="" />
<h:message for="uid" style="color:red;"/>
<h:outputLabel value="#{tb['PWD']}"/>
<h:inputSecret required="true" id="Password"/>
<h:outputText value="" />
<h:message for="Password" style="color:red"/>
</h:panelGrid>
<h:panelGrid>
<h:commandButton action="#{regController.success}" value="Submit" />
</h:panelGrid>
</h:form>
</ui:define>
现在我的问题是,当点击提交按钮验证时,它会打印一条消息,如下面的内容:
j_idt11:Password is required.
此消息来自空密码字段。似乎一切正常。但是,我想将消息显示为“需要密码”而不是“j_idt11:密码是必需的。”。
我知道jsf中有requiredMessage属性,我可以很容易地实现这一点,但我不想使用这个requiredMessage属性,我只想按照上面的过程,其中“id”将作为参数传递{在messages.properties文件中输出0}并打印消息。所以,总之,我的要求是显示只有id属性而不是复合id的消息,如“j_idt11:需要密码”。
我知道jsf在运行时生成这个复合id,所以,有没有办法在显示错误信息的同时从id部分消除这个“j_idt11”?
答案 0 :(得分:0)
在label
或h:inputText
中添加h:inputSecret
属性:
<h:inputSecret id="password" value="#{bean.password}"
required="true" label="#{tb['PWD']}" />