[Java lista] JSF alapprobléma

Keresztes József jkeresztes at vati.hu
2007. Nov. 8., Cs, 10:21:30 CET


Sziasztok !
 
Andris: eddig ez volt a leghasznosabb tanács amit adtak a fórumokon/levlistán,
ki is próbáltam, és úgy néz ki működik ! Köszönöm !
Akkor egy kicsit beleásom magam a converter-ek világába is.
Már csak azt nem értem az alap IntegerConverter vajon miért nem így működik ?
 
Joe
________________________________

Feladó: javalist-bounces at javagrund.hu meghatalmazó: Andras Dobrosi
Küldve: 07-11-08, Cs 9:53
Címzett: javalist at javagrund.hu
Tárgy: Re: [Java lista] JSF alapprobléma


Szia!

Ha nem vagy elegedett a default Integer konverter mukodesevel akkor definiald at, pl igy::

public class MyIntegerConverter extends IntegerConverter {
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) { 
        System.out.println("arg2=" + arg2);
        ValueExpression defaultValueExpression = arg1
                .getValueExpression("value");
        ELContext elCtx = arg0.getELContext(); 
        if((arg2.equals("") /*|| arg2.equals("legyen null") || arg2
                .equals("null"))*/) {
            arg2 = null;
        }
        if (defaultValueExpression.getValue (elCtx) != null
                && arg2 == null) {
            defaultValueExpression.setValue(elCtx, null);
        }
        return super.getAsObject(arg0, arg1, arg2);
    }

    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) { 
        return super.getAsString(arg0, arg1, arg2);
    }
}

Ne felejtsd ki a faces-config-bol:

    <managed-bean>
        <managed-bean-name>bean</managed-bean-name>
        <managed-bean-class>MyBean</managed-bean-class> 
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <converter>
      <converter-for-class>java.lang.Integer</converter-for-class>
      <converter-class> mypack.myconverter.MyIntegerConverter</converter-class>  
    </converter>

Udv.,
Andris


On Nov 8, 2007 12:06 AM, Keresztes József < jkeresztes at vati.hu <mailto:jkeresztes at vati.hu> > wrote:


	Sziasztok !
	
	Mivel több JSF verzióval, több fejlesztőeszközzel is kipróbáltam a dolgot, de egyik faces-config.xml -lel sem működik, mindegy melyiket másolom.
	Amúgy a fura az hogy mivel kicsit már beleástam a JSF működésébe, érthetetlen ez a működés ugyanis: egy input mező mögött egy UIInput húzódik meg (a view egy eleme). A felhasználó submit-ol, ekkor az érték az UIInput "submitted value"-ba kerül. Amennyiben pedig a conversion és a validation is sikeres akkor a "local value" is megkapja a megfelelő tartalmat. Jelen esetünkben egy null kerül be mint submitted value. Namost, ha a form legalább 1 eleménél konverziós vagy validációs hiba lép fel a JSF-nek kutya kötelessége lenne a submitted value-ből visszamásolni a form mezőjébe az értéket hogy a felhasználó javíthassa. Ez működik is ha a bean-ben egy String típusú elemre hivatkozunk, működik ha Integer a típus de a mezőben van bármilyen tartalom, de ha a mezőből kiürítette az adatot a user és a form nem valid, a JSF ezt a mezőt a bean-ből tölti fel. Miért ??? 
	Illetve ha required="true" van a mezőre akkor nem nyúl a bean-hez. (Mert az már tényleg vicces lenne hogy egy üres mezőre kiírja hogy required, de közben beletöltene egy numerikus adatot).
	Ha nem jól tudom a működést, javítsatok ki ! 
	
	Ha ezen nem lehet segíteni akkor mi a teendő ?
	1. A bean-ben minden elem String, nem használok Integer-t, Date-t,...
	2. Sosem használok session-scope bean-eket, mert ilyenkor a háttérben
	  (az űrlap elküldésekor) nincs bean amiből elő tudna szedni adatot. 
	3. Szivatom a felhasználót, ez így működik és kész.
	Szerintem egyik sem normális megoldás a háromból.
	
	A 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 < http://java.sun.com/dtd/web-facesconfig_1_1.dtd> ">
	<faces-config>
	 <!-- navigations -->
	 <navigation-rule> 
	   <navigation-case>
	     <from-outcome>ok</from-outcome>
	     <to-view-id>/ok.jsp</to-view-id>
	   </navigation-case>
	 </navigation-rule>
	 <navigation-rule> 
	   <navigation-case>
	     <from-outcome>valid_feladat</from-outcome>
	     <to-view-id>/valid_feladat.jsp</to-view-id>
	   </navigation-case>
	 </navigation-rule> 
	 <!-- beans -->
	 <managed-bean>
	   <managed-bean-name>bean</managed-bean-name>
	   <managed-bean-class>main.Bean</managed-bean-class>
	   <managed-bean-scope>session</managed-bean-scope> 
	 </managed-bean>
	</faces-config>
	
	
	________________________________
	
	Feladó: javalist-bounces at javagrund.hu meghatalmazó: Andras Dobrosi 
	Küldve: 07-11-07, Sze 17:35
	Címzett: javalist at javagrund.hu
	Tárgy: Re: [Java lista] JSF alapprobléma
	


	Szia Joe!
	
	Megmutatnad a faces-config.xml-ed?
	
	Udv.,
	Andris
	
	
	On Nov 7, 2007 4:39 PM, Keresztes József <jkeresztes at vati.hu> wrote:
	
	
	       Sziasztok !
	
	       Mostanában elkezdtem foglalkozni JavaServer Faces-zel. Össze is dobtam egy mini alkalmazást, és aztán beleütköztem egy alapvető problémába, amire azt hittem hogy bug, de kiderült hogy az 1.1 és az 1.2 is így működik. Egyszerűen nem akarom elhinni hogy ezt így akarták a JSF fejlesztői !
	
	       Arról van szó hogy ha egy űrlapot hibásan töltök ki akkor a submit gomb után VÁLTOZATLANUL kéne visszakapnom az űrlapot, és a mezők mellé/alá a hibaüzeneteket. 
	       De ez nem így működik, egyes mezők tartalma felülíródik. A felhasználó miért nem azt kapja vissza amit begépelt ?
	
	       A jsp lapon:
	
	       <h:inputText value="#{bean.field1}" /> 
	       <h:inputText value="#{bean.field2}" required="true" />
	
	       A hozzátartozó session-scope bean-ben pedig field1, és field2 típusa is Integer,
	       és a bean konstruktora töltse fel mindkét mezőt egy nem null értékkel. 
	
	       Amikor a jsp lap bejön akkor ugye mindkét mezőben látom az értéket. Most kitörlöm mindkét mezőt, lenyomom a submitot, a field2-re jön a hibaüzenet és a field1-be pedig visszatölti a bean-ből egy régi tartalmat. Di miért ? Miért vágja felül a user által megadott (üres) tartalmat ? Itt az alapműködés sérül. 
	       A kérdésemet más fórumon is feltettem, értelmes választ nem kaptam, gondoltam hátha van köztetek aki JSF-fel foglalkozik, ebbe az alapproblémába bele kellett hogy ütközzön.
	
	       Üdv, Joe
	
	
	
	
	
	
	       _______________________________________________
	       Javalist mailing list
	       Javalist at javagrund.hu
	        http://javagrund.hu/mailman/listinfo/javalist <http://javagrund.hu/mailman/listinfo/javalist> 
	
	
	
	
	

	_______________________________________________
	Javalist mailing list
	Javalist at javagrund.hu 
	http://javagrund.hu/mailman/listinfo/javalist
	
	


--------- következő rész ---------
Egy nem text típusú csatolt állomány át lett konvertálva...
Név: nem elérhető
Típus: application/ms-tnef
Méret: 12118 bytes
Leírás: nem elérhető
Url : http://javagrund.hu/pipermail/javalist/attachments/20071108/c97607df/attachment.bin 


További információk a(z) Javalist levelezőlistáról