maddin Geschrieben 10. Januar 2008 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Newlukai Geschrieben 11. Januar 2008 Teilen Geschrieben 11. Januar 2008 Schau mal hier auf Seite 18. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 11. Januar 2008 Teilen Geschrieben 11. Januar 2008 Hi, probier mal rating als String zu setzen und erst in der Klasse Rating in eine Zahl umzuwandeln. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 11. Januar 2008 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.