ďťż
 
MyFaces - walidacja ďťż
 
MyFaces - walidacja
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

MyFaces - walidacja



syllepsa - 22-11-2006 01:18
MyFaces - walidacja
  Przejrzalem sobie sposoby walidacji danych dostepnych dla JSF:
http://www-128.ibm.com/developerwork...ibrary/j-jsf3/

Jednak brakuje mi tu jednej rzeczy, a mianowicie chcialbym uzyskac cos na
ksztalt:

<h:inputText id="firstName" value="#{UserRegistration.user.firstName}">
<f:validateLength minimum="2" maximum="25" />
</h:inputText>

Jednak validateLength wraz z parametrami chcialbym wrzucic do jakiegos xmla
najlepiej faces-config.xml. Dodatkowo chcialbym w tym pliku przechowywac
lancuch tekstowy wyswietlany na wypadek niepomyslnej walidacji. Nie chodzi
mi tu o implementacje ManagedBeana . No chyba, ze bylby on tworzony
dynamicznie, wylacznie na podstawie wpisu w faces-config. Ponizej
zamieszczam pseudo kod"

<managed-bean>
<managed-bean-name>ValidatorBean</managed-bean-name>
<managed-bean-class>validators.ValidatorBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>validateLengthMinimum</property-name>
<value>3</value>
</managed-property>
<managed-property>
<property-name>validateLengthMaximum</property-name>
<value>12</value></managed-property>
</managed-property>
<errorMessage>Imie musi sie skladac maksymalnie z 12 liter</errorMessage>
</managed-bean>

Chcialbym odseparowac walidacje od kodu widoku. Bez zbednego w tym wypadku
jawnego tworzenia klasy implementujacej javax.faces.validator.Validator. Czy
jest to mozliwe?

Pozdrawiam

Mariusz





Jacek Laskowski - 23-11-2006 00:13

  syllepsa wrote:

> Jednak brakuje mi tu jednej rzeczy, a mianowicie chcialbym uzyskac cos na
> ksztalt:
>
> <h:inputText id="firstName" value="#{UserRegistration.user.firstName}">
> <f:validateLength minimum="2" maximum="25" />
> </h:inputText>
>
> Jednak validateLength wraz z parametrami chcialbym wrzucic do jakiegos xmla
> najlepiej faces-config.xml. Dodatkowo chcialbym w tym pliku przechowywac
> lancuch tekstowy wyswietlany na wypadek niepomyslnej walidacji. Nie chodzi
> mi tu o implementacje ManagedBeana . No chyba, ze bylby on tworzony
> dynamicznie, wylacznie na podstawie wpisu w faces-config. Ponizej
> zamieszczam pseudo kod"
>
> <managed-bean>
> <managed-bean-name>ValidatorBean</managed-bean-name>
> <managed-bean-class>validators.ValidatorBean</managed-bean-class>
> <managed-bean-scope>request</managed-bean-scope>
> <managed-property>
> <property-name>validateLengthMinimum</property-name>
> <value>3</value>
> </managed-property>
> <managed-property>
> <property-name>validateLengthMaximum</property-name>
> <value>12</value></managed-property>
> </managed-property>
> <errorMessage>Imie musi sie skladac maksymalnie z 12 liter</errorMessage>
> </managed-bean>
>
> Chcialbym odseparowac walidacje od kodu widoku. Bez zbednego w tym wypadku
> jawnego tworzenia klasy implementujacej javax.faces.validator.Validator. Czy
> jest to mozliwe?

Może coś takiego?

Strona index.jsp:

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<f:view>
<html>
<body>
<h:form>
<h:messages layout="table" style="color: red" />
<hr>
<h:inputText id="imie" value="Jacek"
validator="#{formularz.sprawdzImie}" />
<h:message for="imie" errorStyle="color: red" />
<br>
<h:commandButton value="Submit" />
</h:form>
</body>
</html>
</f:view>

faces-config.xml:

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>formularz</managed-bean-name>
<managed-bean-class>pclj.Formularz</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>errorText</property-name>
<value>error</value>
</managed-property>
<managed-property>
<property-name>errorMessageDetail</property-name>
<value>Prosze o imie inne niz {0}</value>
</managed-property>
<managed-property>
<property-name>errorMessageSummary</property-name>
<value>Nieprawidlowe imie</value>
</managed-property>
</managed-bean>
</faces-config>

i w końcu pclj.Formularz:

package pclj;

import java.text.MessageFormat;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

public class Formularz {
private String errorText;

private String errorMessageSummary;

private String errorMessageDetail;

public void sprawdzImie(FacesContext ctx, UIComponent comp, Object obj) {
String str = (String) obj;
if (str == null || str.equalsIgnoreCase(this.errorText)) {
FacesMessage msg = new FacesMessage();
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
msg.setSummary(MessageFormat.format(this.errorMess ageSummary, new
Object[] {this.errorText}));
msg.setDetail(MessageFormat.format(this.errorMessa geDetail, new
Object[] {this.errorText}));
ctx.addMessage(comp.getClientId(ctx), msg);
} else {
System.out.println("Nic się nie dzieje - nuda. Wpisz \"" +
this.errorText + "\" a Twoje życie się odmieni!");
}
}

public void setErrorMessageDetail(String errorMessageDetail) {
this.errorMessageDetail = errorMessageDetail;
}

public void setErrorMessageSummary(String errorMessageSummary) {
this.errorMessageSummary = errorMessageSummary;
}

public void setErrorText(String errorText) {
this.errorText = errorText;
}
}

Jacek

--
Jacek Laskowski
http://www.jaceklaskowski.pl




syllepsa@wp.pl - 24-11-2006 00:42

  Jacek Laskowski wrote:
> syllepsa wrote:
>
> > Jednak brakuje mi tu jednej rzeczy, a mianowicie chcialbym uzyskac cos na
> > ksztalt:
> >
> > <h:inputText id="firstName" value="#{UserRegistration.user.firstName}">
> > <f:validateLength minimum="2" maximum="25" />
> > </h:inputText>
> >
> > Jednak validateLength wraz z parametrami chcialbym wrzucic do jakiegos xmla
> > najlepiej faces-config.xml. Dodatkowo chcialbym w tym pliku przechowywac
> > lancuch tekstowy wyswietlany na wypadek niepomyslnej walidacji. Nie chodzi
> > mi tu o implementacje ManagedBeana . No chyba, ze bylby on tworzony
> > dynamicznie, wylacznie na podstawie wpisu w faces-config. Ponizej
> > zamieszczam pseudo kod"
> >
> > <managed-bean>
> > <managed-bean-name>ValidatorBean</managed-bean-name>
> > <managed-bean-class>validators.ValidatorBean</managed-bean-class>
> > <managed-bean-scope>request</managed-bean-scope>
> > <managed-property>
> > <property-name>validateLengthMinimum</property-name>
> > <value>3</value>
> > </managed-property>
> > <managed-property>
> > <property-name>validateLengthMaximum</property-name>
> > <value>12</value></managed-property>
> > </managed-property>
> > <errorMessage>Imie musi sie skladac maksymalnie z 12 liter</errorMessage>
> > </managed-bean>
> >
> > Chcialbym odseparowac walidacje od kodu widoku. Bez zbednego w tym wypadku
> > jawnego tworzenia klasy implementujacej javax.faces.validator.Validator.. Czy
> > jest to mozliwe?
>
> Może coś takiego?
>
> Strona index.jsp:
>
> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
>
> <f:view>
> <html>
> <body>
> <h:form>
> <h:messages layout="table" style="color: red" />
> <hr>
> <h:inputText id="imie" value="Jacek"
> validator="#{formularz.sprawdzImie}" />
> <h:message for="imie" errorStyle="color: red" />
> <br>
> <h:commandButton value="Submit" />
> </h:form>
> </body>
> </html>
> </f:view>
>
> faces-config.xml:
>
> <?xml version='1.0' encoding='UTF-8'?>
>
> <!DOCTYPE faces-config PUBLIC
> "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
> "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
> <faces-config>
> <managed-bean>
> <managed-bean-name>formularz</managed-bean-name>
> <managed-bean-class>pclj.Formularz</managed-bean-class>
> <managed-bean-scope>request</managed-bean-scope>
> <managed-property>
> <property-name>errorText</property-name>
> <value>error</value>
> </managed-property>
> <managed-property>
> <property-name>errorMessageDetail</property-name>
> <value>Prosze o imie inne niz {0}</value>
> </managed-property>
> <managed-property>
> <property-name>errorMessageSummary</property-name>
> <value>Nieprawidlowe imie</value>
> </managed-property>
> </managed-bean>
> </faces-config>
>
> i w końcu pclj.Formularz:
>
> package pclj;
>
> import java.text.MessageFormat;
>
> import javax.faces.application.FacesMessage;
> import javax.faces.component.UIComponent;
> import javax.faces.context.FacesContext;
>
> public class Formularz {
> private String errorText;
>
> private String errorMessageSummary;
>
> private String errorMessageDetail;
>
> public void sprawdzImie(FacesContext ctx, UIComponent comp, Object obj) {
> String str = (String) obj;
> if (str == null || str.equalsIgnoreCase(this.errorText)) {
> FacesMessage msg = new FacesMessage();
> msg.setSeverity(FacesMessage.SEVERITY_ERROR);
> msg.setSummary(MessageFormat.format(this.errorMess ageSummary, new
> Object[] {this.errorText}));
> msg.setDetail(MessageFormat.format(this.errorMessa geDetail, new
> Object[] {this.errorText}));
> ctx.addMessage(comp.getClientId(ctx), msg);
> } else {
> System.out.println("Nic się nie dzieje - nuda. Wpisz \"" +
> this.errorText + "\" a Twoje życie się odmieni!");
> }
> }
>
> public void setErrorMessageDetail(String errorMessageDetail) {
> this.errorMessageDetail = errorMessageDetail;
> }
>
> public void setErrorMessageSummary(String errorMessageSummary) {
> this.errorMessageSummary = errorMessageSummary;
> }
>
> public void setErrorText(String errorText) {
> this.errorText = errorText;
> }
> }
>
> Jacek
>
> --
> Jacek Laskowski
> http://www.jaceklaskowski.pl

Witam,

Dzieuje za obszerna odpowiedz. Prezentowane przez Ciebie rozwiazanie
jest z pewnoscia jakims wysjciem, jednak jestem zdania, iz w tym
prostym przypadku lepiej pozostac przy:

<h:outputText id="output1" value="Podaj imię" />
<h:inputText id="input1" value="#{addressBean.imie}"
required="true">
<f:validateLength minimum="2" maximum="4" />
</h:inputText>
<h:message
style="color: red; text-decoration: overline"
id="firstNameError"
for="input1"/>

+<jakisCustomErrorMessage>

Gdyby nadmiernosc kodu zaczela irytowac, to zawsze mozna uzyc wzorca
Composite View.

Pozdrawiam

Mariusz




Jacek Laskowski - 24-11-2006 00:42

  syllepsa@wp.pl wrote:

> Dzieuje za obszerna odpowiedz. Prezentowane przez Ciebie rozwiazanie
> jest z pewnoscia jakims wysjciem, jednak jestem zdania, iz w tym
> prostym przypadku lepiej pozostac przy:
>
> <h:outputText id="output1" value="Podaj imię" />
> <h:inputText id="input1" value="#{addressBean.imie}"
> required="true">
> <f:validateLength minimum="2" maximum="4" />
> </h:inputText>
> <h:message
> style="color: red; text-decoration: overline"
> id="firstNameError"
> for="input1"/>

A czym się to zatem różni od Twojej pierwotnej propozycji?! Wygląda
jakbyś odpowiedział sam sobie propozycją, którą sam podałeś. Trochę
zabawne, ale tak też można ;-)

I dodatkowo, gdzie przypisujesz własne komunikaty błędu? Chyba nie
chcesz otrzymywać ich w języku angielskim i będącym tak ogólnym jak
"Należy wprowadzić ciąg o długości od 2 do 4 znaków"?

Coś musiałem przegapić pierwszym razem i stąd takie kłopoty ze
zrozumieniem ;-)

Jacek

--
Jacek Laskowski
http://www.jaceklaskowski.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    (plsql) walidacja danych za pomoca wyrażeń regularnych Kilka pytań. OT programowanie gier Zapytanie o GIMP-a [wykonam] Strony www w php za 30 zł. Fachowiec do poprawienia oscommerce potrzebny TOAD blad polaczenia z serwerem: ORA-01031 insufficient privileges deseń_jak zrobić? Oracle 8 Sekwencje w PostgreSQL
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • absolwenci.keep.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com