Up to the last time, I created an environment setting for running JSF + CDI on Tomcat and an application for checking the operation.
This time, I would like to add a function to this and run Bean Validation.
Click here for the last time-> "It worked! JSF + CDI (Environment settings) with Tomcat"
The environment is as usual:
The implementation procedure is as follows. We will add functions to the previous operation check application.
Bean Validation library in the maven settings.Use ExtVal of myfaces. Since this refers to validation-api-1.0.0GA, hibernate-validator uses the slightly older 4.3.2.Final.
pom.xml
<dependency>
<groupId>org.apache.myfaces.extensions.validator.validation-modules</groupId>
<artifactId>myfaces-extval-bean-validation</artifactId>
<version>2.0.8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.2.Final</version>
<scope>runtime</scope>
</dependency>
We will add functions to the previous operation check application.
Add the required validators to your login and password.
First, add an annotation (@NotNull) to the Index Bean.
InexBean.java
public class IndexBean implements Serializable {
@NotNull
private String loginId;
@NotNull
private String password;
//Omitted below
}
Next is xhtml (excerpt).
index.html
<body>
<h:messages escape="true" id="messages" showDetail="false" closable="true"/>
<h:form id="form">
<br/>
<h:inputText value="#{index.loginId}" label="username" ph:placeholder="Username" /><br/>
<h:inputSecret value="#{index.password}" label="password" ph:placeholder="Password" /><br/>
<h:commandButton action="#{index.loginEvent()}" value="Login" update="@form" />
</h:form>
</body>
Up to this point, display the screen and press the login button. It will be as follows.
This is fine, but I would like to make the message in Japanese. ValidationMessage_ja.properties
Create properties under src / main / resources.
ValidationMessage_ja.properties
javax.faces.validator.BeanValidator.MESSAGE={0}
javax.validation.constraints.NotNull.message={1}Is mandatory
I will not explain in detail, but the first line is the display format of the message used when JSF executes Bean Validation. A message is set to {0} and displayed on the screen.
The second line is the message. The key corresponds to the Bean Validation Not Null. For {1}, the value specified by the label attribute of xhtml is set.
This area is controlled by JSF.
Add this file to faces-config.xml to make it recognized by JSF.
faces-config.xml
<application>
<message-bundle>ValidationMessages</message-bundle>
</application>
After implementing the above, display the screen and press the login button.

did it~!
that's all.
BeanVaidation is also good with bval-jsr.
In this case, place javaee-api-8.0.4.jar under tomcat / lib. Add it to pom as it is needed for compilation. (It doesn't work with <scope> compile </ scope>. Place it in tomcat / lib.)
TomEE is better if you do so far.
pom.xml
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.bval</groupId>
<artifactId>bval-jsr</artifactId>
<version>2.0.5</version>
</dependency>