maddin Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 Hi, ich habe ein - hoffentlich kleines Problem - mit einer JSF Seite. Ich habe mir dafür ein eigenes Tag definiert. Dazu habe ich die folgende Klasse geschrieben public class Rating extends TagSupport { private float rating = 0.0f; private int max = 5; private String full = null; private String half = null; private String none = null; @Override public int doEndTag() throws JspException { try { JspWriter out = pageContext.getOut(); int n = 0; for (int i = 0; i < (int) rating; i++ ) { out.write("<img src=\"" + full + "\" />"); n++ ; } if ((rating - (int) rating) >= 0.5) { out.write("<img src=\"" + half + "\" />"); n++ ; } while ( ++n <= max) { out.write("<img src=\"" + none + "\" />"); } } catch (Exception e) {} return EVAL_PAGE; } // Getter und Setter } Dazu die passende TLD <?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>jsp4</short-name> <uri>/intech/rating</uri> <tag> <name>rating</name> <tag-class>intech.Rating</tag-class> <body-content>JSP</body-content> <attribute> <name>rating</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>max</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>full</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>half</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>none</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> Und die TLD in die web.xml eingebunden <jsp-config> <taglib> <taglib-uri>/intech/rating</taglib-uri> <taglib-location>/WEB-INF/tlds/rating.tld</taglib-location> </taglib> </jsp-config> Das Tag soll eine Wertung in Form von vollen, halben und leeren Sterne anzeigen. Also: z.B. max = 5, rating = 3,5, full, half, none entsprechnd die URI zu den Bildern der halben, vollen, leeren Sterne würde drei volle Sterne, einen halben und einen leeren anzeigen. Das Tag nutze ich nun in einer JSF dataTable. <h:dataTable value="#{search.searchResults}" var="list" rowClasses="odd,even" styleClass="dataTable"> <!-- ... --> <h:column> <f:facet name="header"> <h:outputText value="Bewertung" /> </f:facet> <i:rating rating="#{list.rating}" full="../img/fullstar.png" half="../img/halfstar.png" none="../img/nostar.png" /> </h:column> </h:dataTable> Als wert für das Attribut rating möchte ich den Wert in meiner Datenquelle nutzen. Ich habe dies ähnlich versucht, wie z.B. beim outputText, also #{list.rating}. Allerdings wird dieser Ausdruck nicht ausgewertet und ich bekomme einen java.lang.NumberFormatException: For input string: "#{list.rating}" Die naheliegende Frage ist nun, was mache ich falsch? Wenn ich anstatt #{list.rating} z.B. 3 einsetzte zeigt das Tag das gewünschte Verhalten.
geloescht_Newlukai Geschrieben 11. Januar 2008 Geschrieben 11. Januar 2008 Schau mal hier auf Seite 18.
Jaraz Geschrieben 11. Januar 2008 Geschrieben 11. Januar 2008 Hi, probier mal rating als String zu setzen und erst in der Klasse Rating in eine Zahl umzuwandeln. Gruß Jaraz
maddin Geschrieben 11. Januar 2008 Autor Geschrieben 11. Januar 2008 Schau mal hier auf Seite 18. Vielen Dank für die Antwort. Hab das ganzen noch ein wenig an die neue Version angepasst und läuft super.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden