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}

Suchen
Kategorien
Archiv

You are currently browsing the archives for the Java EE category.