MVC Konzept Frage - JSTL Tags funktionieren nicht in Facelets/MyFaces

alan79

Mitglied
Hallo miteinander

Folgende Libs werden verwendet.
- Hibernate 3.2.4
- MyFaces 1.2.2
- Richfaces 3.2
- Facelets 1.1.13

In meiner MySQL DB gibts eine Tabelle "news". Bestehend aus folgenden Feldern:
header (varchar(50))
description (text)

Ich möchte gerne die "News"-Datensätze Auflisten. Funktioniert alles soweit sehr gut. Allerdings möchte ich gerne die "description", falls grösser als 60 Zeichen, in der Liste auf 60 Zeichen kürzen. Falls die description gekürzt wurde soll ein Link "Read more" eingeblendet werden.

Grundsätzlich stellt sich hier für mich schon mal die Frage, wo diese Logik implementiert werden sollte? Ich verfolge das MVC Konzept.
Aus meiner Sicht geht es hier um eine reine GUI thematik und daher sollte diese Funktionalität doch eigentlich in die View oder allenfalls den Controller integriert werden..

Ich habe versucht das Ganze mit JSTL zu realisieren. Musste jedoch feststellen, das JSTL zusammen mit Facelets nicht 100%ig funktioniert? Oder?
Die Funktionen "fn:length" und "fn:substring" funktionieren. "c:if" jedoch nicht, es scheint so, als wird jede "c:if" Schleife ausgewertet, egal wie die Bedingung evaluiert.
Hat jemand eine Idee wie ich diese Funktionalität direkt in der Page integrieren könnte?

Die Kürzung der Description konnte ich beim Zugriff auf die Daten realsieren (newsDao).

Nun stellt sich einfach noch die Frage, wie ich den Link "Read More" nur dann anzeigen kann, wenn die "description" gekürzt wurde..? Wie geht das ohne "c:if" und "c:choose"?

Danke für irgendwelche Tipps und Tricks.
Grüsse
Alan
-
 
Zuletzt bearbeitet:
Die Kürzung des Description Textes hab ich nun sauber hingekriegt. Dies mit der Hilfe eines Converters.

Code:
package com.test.converter;
 
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
 
public final class SubstringConverter implements Converter  {
 
    public SubstringConverter() {
        super();
    }
 
    public Object getAsObject( FacesContext arg0, UIComponent arg1, String d ) {
        return d;
    }
 
    public String getAsString( FacesContext arg0, UIComponent arg1, Object arg2) {
        return ((String)arg2).substring(0,5);
    }
}

The corresponding entry in faces-config.xml
Code:
<converter>
    <converter-id>mySubstringConverter</converter-id>
    <converter-class>com.test.converter.SubstringConverterr</converter-class>
</converter>

Benützung in der Page:
Code:
<h:outputText value="#{gen.Name}" converter="mySubstringConverter"/>

Was leider immer noch nicht klappt ist das einblenden und ausblenden des Links "Read more" aufgrund der länge des Textes. Hier bietet sich eigentlich das "rendered" Attribut an nur leider scheint man hier ziemlich eingeschränkt zu sein bezüglich der String-Funktionen (z.B. length()). Ich habs hingekriegt, wenn ich eine Methode in der Backing-Bean aufrufe, jedoch finde ich das einfach nicht richtig v.a. aufgrund des verwendeten Reverse Engineering Ansatzes.

Hat jemand eine Idee?
 

Neue Beiträge

Zurück