Archive for the ‘Java EE’ Category
Eigene Input Validators in JSF
Eigene Input Validators in JSF
Ein eigener Validator ist immer von nutzen. Hier ein kleines Beispiel wie man so einen schreibt.

<h:form>
<table>
<tr>
<td>Eigener Validator:
<h:inputText value="#{eigenerValidator.number1}"
required="true"
requiredMessage="Sie müssen etwas eintragen"
converterMessage="Es muss eine Nummer sein"
validator="#{eigenerValidator.myV}"
id="id1"/>
</td>
<td><h:message for="id1" styleClass="errorMessage"/></td>
</tr>
<tr>
<th>
<h:commandButton value="OK"
action="#{bidBean2.test1}"/></th></tr>
</table>
</h:form>

Der Bean
package de.worldling;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
@ManagedBean
public class EigenerValidator {
private double number1;
public String go() {
return ("nextpage");
}
public void myV(FacesContext context, UIComponent componentToValidate, Object value)
throws ValidatorException {
double number1 = ((Double) value).doubleValue();
if (number1 < 10) {
FacesMessage message = new FacesMessage("Eigener Input Validator : )");
throw new ValidatorException(message);
}
}
//getters and setters
public double getNumber1() {
return number1;
}
public void setNumber1(double number1) {
this.number1 = number1;
}
}
Input Validation in JSF
Input Validation in JSF
Input Validation ist immer wichtig. Hier 2 Methoden um das in JSF zu machen.

Hier der Form Code:
<fieldset>
<legend>Validation 1</legend>
<h:form>
<h:messages styleClass="errorMessage"/>
<table>
<tr>
<td>Number:
<h:inputText value="#{validationBean.number}"/></td></tr>
<tr>
<th>
<h:commandButton value="OK"
action="#{validationBean.go}"/></th></tr>
</table>
</h:form>
</fieldset>
Der Bean:
package de.worldling;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
@ManagedBean
public class ValidationBean {
private String number;
private double numericNumber;
public String go() {
FacesContext context = FacesContext.getCurrentInstance();
if (getNumericNumber() <= 1.50) {
context.addMessage(null,
new FacesMessage("Es muss minimum 1.50 eingetragen werden."));
}
if (context.getMessageList().size() > 0) {
return (null);
} else {
return ("next");
}
}
//getters and setters
public double getNumericNumber() {
return numericNumber;
}
public void setNumericNumber(double numbericNumber) {
this.numericNumber = numbericNumber;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
try {
numericNumber = Double.parseDouble(number);
} catch (NumberFormatException nfe) {
}
}
}

<h1>#{validationBean.number}</h1>
Hier das Ergebnis:

Jetzt eine etwas andere Methode, mit required=”true” und anderen JSF Tags:

<fieldset>
<legend>Validation 2</legend>
<h:form>
<table>
<tr>
<td>Number:
<h:inputText value="#{validationBean2.number}"
required="true"
requiredMessage="Sie müssen etwas eintragen"
converterMessage="Es muss eine Nummer sein"
validatorMessage="Das Minimum hier ist 1.50"
id="number1" >
<f:validateDoubleRange minimum="1.50"/>
</h:inputText>
</td>
<td><h:message for="number1" styleClass="errorMessage"/></td></tr>
<tr>
<td>Text:
<h:inputText value="#{validationBean2.text}"
required="true"
requiredMessage="Sie müssen etwas eintragen"
validatorMessage="Es müssen zwischen 2 und 6 Buchstaben sein"
id="text1">
<f:validateLength minimum="2" maximum="6"/>
</h:inputText></td>
<td><h:message for="text1" styleClass="errorMessage"/></td></tr>
<tr><td><h:commandButton value="OK"
action="#{validationBean2.go}"/></td></tr>
</table>
</h:form>
</fieldset>
Der Bean:
package de.worldling;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class ValidationBean2 {
private double number;
private String text;
public String go() {
return ("next2");
}
//getters and setters
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public double getNumber() {
return number;
}
public void setNumber(double number) {
this.number = number;
}
}

#{validationBean2.number}
#{validationBean2.text}
Basic Ajax in JSF
Basic Ajax in JSF

Eine ganz einfache WebApp, wo wir mit Ajax prüfen, ob ein richtiges Passwort eingegeben wurde.
Hier die index.xhtml
<h:form>
<fieldset>
<legend>Ajax Pass Test</legend>
<h:inputSecret value="#{pass.secret}" id="id1"/><br/>
<h:commandButton value="OK"
action="#{pass.checkPass}">
<f:ajax render="id2" execute="id1"/>
</h:commandButton><br/>
<h2><h:outputText value="#{pass.odp}"
id="id2"/></h2>
</fieldset>
</h:form>
Die Bean Classe:
package de.worldling;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class Pass {
private String secret;
private String odp;
public void checkPass() {
if (secret.equals("abc")) {
odp = "Correct password";
} else {
odp = "Wrong password";
}
}
public String getOdp() {
return odp;
}
public void setOdp(String odp) {
this.odp = odp;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
}
Wenn wir ein falsches Passwort eingeben:

Wenn wir ein richtiges Passwort eingeben

ActionListener und Local .properties in JSF
ActionListener und Local .properties in JSF
Wir machen eine App in der man die Farbe und die Sprache ändern kann. Erst wie das aussieht:



index.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>...</title>
</h:head>
<h:body>
<f:view locale="#{listener.locale}" >
<h1 style="color:#{listener.color}">#{message.tekst}</h1>
<h:form>
<h:commandButton value="DE"
actionListener="#{listener.changeLocaleDE}"
immediate="true"/>
<h:commandButton value="EN"
actionListener="#{listener.changeLocaleEN}"
immediate="true"/><br /><br />
<h:commandButton value="#{message.blue}"
actionListener="#{listener.makeItBlue}"
immediate="true"/>
<h:commandButton value="#{message.green}"
actionListener="#{listener.makeItGreen}"
immediate="true"/>
<h:commandButton value="#{message.red}"
actionListener="#{listener.makeItRed}"
immediate="true"/>
</h:form>
</f:view>
</h:body>
</html>
Die Listener.java Classe:
package de.worldling;
import java.util.Locale;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
@ManagedBean
@SessionScoped
public class Listener {
private Locale locale;
private String language = "en";
private String color = "red";
public void changeLocaleDE(ActionEvent event) {
language = "de";
}
public void changeLocaleEN(ActionEvent event) {
language = "en";
}
public void makeItBlue(ActionEvent event) {
color = "blue";
}
public void makeItGreen(ActionEvent event) {
color = "green";
}
public void makeItRed(ActionEvent event) {
color = "red";
}
//Getters and setters
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public Locale getLocale() {
if (language.equals("de")) {
return new Locale("de");
} else {
return new Locale("en");
}
}
public void setLocale(Locale locale) {
this.locale = locale;
}
}
faces-config.xml
de.worldling.message
message
message.properties
tekst=Hello green = Green blue = Blue red = Red
message_de.properties
tekst=Hallo green = Grün blue = Blau red = Rot
Faces-Config.xml – Navigation-Rule und Managed-Bean
Faces-Config.xml – Navigation-Rule und Managed-Bean
Erstmal haben wir ein Formular:

<h:form>
Your message:
<h:inputText value="#{controller.message}"/>
<br/>
<h:commandButton value="Show Results"
action="#{controller.navi}"/>
</h:form>
Dan die Controller.java Class
package de.worldling;
public class Controller {
private String message = "";
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String navi() {
if (message.trim().length() < 3) {
return ("too-short");
} else {
return "page";
}
}
}
Also hier prüfen wir ob weniger als 3 Buchstaben eingegeben wurden sind:
if (message.trim().length() < 3)
Hier die Navigation-Rule in faces-config.xml:
/index.xhtml too-short /error.xhtml page /page.xhtml
managed-bean in xml
controller
de.worldling.Controller
request
Die Error-Page: error.xhtml
Error!

Die Succes-Page: page.xhtml
Page
Message: #{controller.message}

