Announcement

Collapse
No announcement yet.

JSF Converter - Parameter (Attribute) übergeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JSF Converter - Parameter (Attribute) übergeben

    Environment:
    OS: WinXP
    ServletContainer: Tomcat6
    Java: JDK6
    MYfaces: 1.2.2
    Facelets: 1.1.13

    Bin am verzweifeln. Ich versuche seit einigen Tagen einen flexiblen converter zu schreiben, welcher parameter gesteuert den von z.B. "outputText" übergebenen Wert verändert:
    - substring
    - newlines entfernen
    - etc.

    Ich habe mir als Vorlage den Standard Converter "DateTimeConverter" angesehen.Diesem Converter können folgende Parameter übergeben werden:
    dateStyle, locale, pattern, timeStyle, timeZone, type

    Soweit ich das Verstanden habe werden in der Methode "restoreState" die privaten properties abgefüllt.
    Zusatzfrage: Wie, und wo wird das Array state abgefüllt? Spielt hier die Reihenfolge der Parametereingabe in der JSF page ein Rolle?

    Ich habe versucht das Ganze zu kopieren, jedoch krieg ich das nicht hin.
    1. Die Methode restoreState wird nie aufgerufen
    2. Die Methode getAsObject wird nie aufgerufen
    -> Sämtliche Properties sind null d.h. die Parameter funktionieren nicht.

    Hier ist meine Converter Klasse:
    Code:
    package com.antavis.groupware.converters;
    
    import javax.faces.component.StateHolder;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    
    import org.apache.log4j.Logger;
    
    public final class OutputTextConverter implements Converter,  StateHolder  {
    
    	private String _substring;
    	private String test;
    	
    	private String _maxNewLine;
    	private boolean _transient;
    	private static Logger log = Logger.getLogger(OutputTextConverter.class);
    
    
    	public OutputTextConverter() {
    				
    	}
    
    	public Object getAsObject( FacesContext facesContext, UIComponent uiComponent, String value ) {
    		if (facesContext == null) throw new NullPointerException("facesContext");
    		if (uiComponent == null) throw new NullPointerException("uiComponent");
    
    		System.out.println("Debug converter - getAsObject has been called..");
    		if (value != null)
    		{
    			value = value.trim();
    			if (value.length() > 0)
    			{
    				System.out.println("Debug converter (getasobject): - substring value: "+_substring);
    				if (_substring!=null){
    					Integer substr = Integer.parseInt(_substring.trim());
    					Integer valueLng = value.length();
    
    					if (substr<valueLng)
    					{
    						value = value.substring(0,substr);
    
    					}
    				}
    			}
    
    		}
    
    		return value;
    	}
    
    	public String getAsString( FacesContext facesContext, UIComponent uiComponent, Object val) {
    		if (facesContext == null) throw new NullPointerException("facesContext");
    		if (uiComponent == null) throw new NullPointerException("uiComponent");
    		System.out.println("Debug converter - getAsString has been called..");
    				
    
    		String value = (String) val;
    		if (value != null)
    		{
    			
    			value = value.trim();
    			if (value.length() > 0)
    			{
    				System.out.println("Debug converter (getasstring): - substring value: "+_substring);
    				System.out.println("Debug converter (getasstring): - test value: "+test);
    				if (_substring!=null){
    					Integer substr = Integer.parseInt(_substring.trim());
    					Integer valueLng = value.length();
    
    					if (substr<valueLng)
    					{
    						value = value.substring(0,substr);
    
    					}
    				}
    			}
    
    		}
    
    		return value;
    	}
    
    
    	// STATE SAVE/RESTORE
    	public void restoreState(FacesContext facesContext, Object state)
    	{
    		System.out.println("Debug converter - restoreState() has been called..");
    		Object[] values = (Object[])state;
    		_substring = (String)values[0];
    		_maxNewLine = (String)values[1];
    		test = (String)values[2];
    
    	}
    
    	public Object saveState(FacesContext facesContext)
    	{
    		System.out.println("Debug converter - saveState() has been called..");
    		Object[] values = new Object[3];
    		values[0] = _substring;
    		values[1] = _maxNewLine;
    		values[2]=test;
    		return values;
    	}
    
    
    	private Integer countNewLines(String value){
    		/*
    		 * TODO countNewLines 
    		 */
    		 Integer count = 0;
    
    		 return count;
    	}
    
    	private String substrNewLines(String value, Integer lines){
    		/*
    		 * TODO substrNewLines
    		 */
    		return value;
    	}
    
    
    	public String getSubstring() {
    		return _substring;
    	}
    
    	public void setSubstring(String substring) {
    		_substring = substring;
    	}
    
    	public String getMaxNewLine() {
    		return _maxNewLine;
    	}
    
    	public void setMaxNewLine(String newLine) {
    		_maxNewLine = newLine;
    	}
    
    	public boolean isTransient()
    	{
    		return _transient;
    	}
    
    	public void setTransient(boolean aTransient)
    	{
    		_transient = aTransient;
    	}
    
    	public String getTest() {
    		return test;
    	}
    
    	public void setTest(String test) {
    		this.test = test;
    	}
    
    
    }
    faces-config.xml
    Code:
    	<converter>
    		<description>
    		OutputText Converter: Substr, Remove Newlines etc.</description>
    		<display-name>
    		GW OutputText Converter</display-name>
        	<converter-id>GwOutTextConverter</converter-id>
        	<converter-class>com.antavis.groupware.converters.OutputTextConverter</converter-class>
        	<attribute>
        		<attribute-name>substring</attribute-name>
        		<attribute-class>java.lang.String</attribute-class>
        		<default-value>0</default-value>
        	</attribute>
        	<attribute>
        		<attribute-name>maxNewLine</attribute-name>
        		<attribute-class>java.lang.String</attribute-class>
        		<default-value>0</default-value>
        	</attribute>
        	<attribute>
        		<attribute-name>test</attribute-name>
        		<attribute-class>java.lang.String</attribute-class>
        		<default-value>0</default-value>
        	</attribute>
    	</converter>
    Page:
    Code:
    <h:outputText  value="#{newsVar.description}" escape="false">
    					<f:converter converterId="GwOutTextConverter" substring="5" maxNewLine="3"/>
    					</h:outputText>
    Ich habe zu Debug Zwecken ein paar Consolen Outputs hinzugefügt:
    Wenn ich die Seite aufrufen spuckt die Console folgendes aus:
    Debug converter - getAsString has been called..
    Debug converter (getasstring): - substring value: null
    Debug converter - getAsString has been called..
    Debug converter (getasstring): - substring value: null
    Debug converter - getAsString has been called..
    Debug converter (getasstring): - substring value: null
    Debug converter - saveState() has been called..

    Hat jemand eine Idee was ich falsch mache?
    Vielen Dank und Grüsse
    Alan
Working...
X