c:wenn c:wenn nicht Arbeit
Kann ich den Zugriff auf meine variable gespeichert, in der eine backing-bean von meinem JSF2 Seite, so Dinge wie
<h:outputText value="#{myBean.myValue}"/>
Arbeit, und den Wert (der ist ein int btw.) Drucke okay.
Jedoch, wenn Sie versuchen, verwenden Sie diesen Wert in bedingten Ausdrücken in c:wenn und/oder c:wenn tags, die er nie gleich alles, was... also:
<c:if test="#{myBean.myValue == 1}">
<c:set var="myVar" value="true"/>
</c:if>
<c:choose>
<c:when test="#{myBean.myValue > 1}">
<c:set var="myVar" value="true"/>
</c:when>
</c:choose>
oder sogar
#{myBean.myValue eq '1'}
oder
#{myBean.myValue == '1'}
nie zu true ausgewertet werden, selbst wenn der Wert ist in der Tat 1 oder >1.
Ärgerlicherweise der Vergleich funktioniert in der gerendert Attribut für ein tag! Also diese:
<h:outputText value="whatever" rendered="#{myBean.myValue == 1}"/>
ist in Ordnung!
Was ist Los?
UPDATE:
Dies funktioniert:
public int getMyValue() {
return 1;
}
aber nicht:
@Column(name = "orderstatus")
public int getOrderStatus() {
return orderStatus;
}
Den int-Wert wird korrekt gedruckt, aber 1 == 1 ist false.
Sind entity-beans in einer besonderen Weise behandelt? Kann ich Ihnen für die Anzeige Ihren Wert auf das UI?
UPDATE2:
<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>
Drucke java.lang.Integer.
UPDATE3:
Hier ist der vollständige code:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
<cc:attribute name="orderStatus" required="true"/>
</cc:interface>
<cc:implementation>
<c:choose>
<c:when test="#{cc.attrs.orderStatus == 1}" >
<c:set var="unknownStatus" value="false"/>
</c:when>
<c:when test="#{cc.attrs.orderStatus == 2}" >
<c:set var="unknownStatus" value="false"/>
</c:when>
<c:when test="#{cc.attrs.orderStatus == 3}" >
<c:set var="unknownStatus" value="false"/>
</c:when>
<c:when test="#{cc.attrs.orderStatus == 99}" >
<c:set var="unknownStatus" value="false"/>
</c:when>
<c:otherwise>
<c:set var="unknownStatus" value="true"/>
</c:otherwise>
</c:choose>
<h:graphicImage url="#{resource['img/icons/flag_yellow.png']}" rendered="#{cc.attrs.orderStatus == 1}"/>
<h:outputText value="Created" rendered="#{cc.attrs.orderStatus == 1}"/>
<h:graphicImage url="#{resource['img/icons/flag_orange.png']}" rendered="#{cc.attrs.orderStatus == 2}"/>
<h:outputText value="Stopped" rendered="#{cc.attrs.orderStatus == 2}"/>
<h:graphicImage url="#{resource['img/icons/flag_green.png']}" rendered="#{cc.attrs.orderStatus == 3}"/>
<h:outputText value="Active" rendered="#{cc.attrs.orderStatus == 3}"/>
<h:graphicImage url="#{resource['img/icons/flag_red.png']}" rendered="#{cc.attrs.orderStatus == 99}"/>
<h:outputText value="Failed" rendered="#{cc.attrs.orderStatus == 99}"/>
<h:graphicImage url="#{resource['img/icons/question_mark.png']}" rendered="#{unknownStatus}"/>
<h:outputText value="Unknown" rendered="#{unknownStatus}"/>
</cc:implementation>
</html>
Funktioniert es wenn man es mit einem int-Wert. Aber das funktioniert nicht:
<p:dataTable value="#{cc.attrs.orders}" var="order">
<p:column>
<f:facet name="header">
<h:outputText value="Status"/>
</f:facet>
<mytag:orderStatus orderStatus="#{order.adcOrderStatus.orderStatus}"/>
</p:column>
</p:dataTable>
Zeigt den richtigen Wert:
<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>
InformationsquelleAutor egbokul | 2010-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie erklären, JSTL core-taglib wie folgt?
Wenn nicht, oder falsch erklärt, haben Sie es einfach nicht geparst werden und am Ende den plain-vanilla in der generierten HTML-Ausgabe. Sie können dies überprüfen, durch das öffnen der Seite im browser, rightlicking und die Auswahl View Source. Sie sollten nicht sehen, keine JSTL-tag.
Update: wie pro Ihre update hängt es mit der Tatsache, dass JSTL läuft während der Erstellung der anzeigen und JSF während der render-Zeit von der Ansicht. In Ihrem Fall, diese alle scheitern würden, wenn
#{cc.attrs.orderStatus}
nur während der render-Zeit von der Ansicht. Zum Beispiel, wenn Sie für die aktuell iterierten Element einer Iteration Komponente, wie<h:dataTable>
.Solltest du besser schreiben Sie die composite-Komponente wie folgt zu verwenden
rendered
- Attribut statt:Siehe auch:
Sind Sie mit JSF 2.0 auf JSP oder Facelets?
JSF 2.0 und Facelets. Keine JSP.
Das war ein informativer Kommentar, danke. Ich ursprünglich wollte vermeiden Sie die Verwendung des rendered-Attribut, obwohl...
Als Hinweis für zukünftige Leser er ist mit JSP, da die c-tags aus der JSTL-Bibliothek steht für (JSP Standard Tag Library)
InformationsquelleAutor BalusC
Vor JSF2, diese JSTL-wie Facelets-tags wurden nur ausgewertet, am Baum der Schöpfung der Zeit (ref).
Den JSF2 doc für c:wenn nicht erwähnen und ich weiß, dass die beiden Facelets-Versionen sind nicht kompatibel (das ist definitiv in der spec) und es ist nicht klar, was mir "bearbeitet" bedeutet in diesem Zusammenhang. Es könnte sich lohnen durchlesen der Spezifikation, um zu sehen, wenn Sie beschreibt das Verhalten im detail, überprüfen, was in Ihrem Komponente Baum zur Laufzeit und lassen Sie Ihr Objekt Zustand bei ansichtserstellung Zeit.
InformationsquelleAutor McDowell
In den meisten Fällen ersetzt werden kann, mit einem rendered-Attribut, in einigen Fällen können Sie fügen Sie einige neutralen zusätzliche Komponente wie .
Denn es gibt eine alternative, die besser funktioniert leicht eine zusammen mit der JSF-Lifecycle:
Können Sie konfigurieren aus http://www.intersult.com/wiki/page/JSF%20Ext#section-JSF+Ext-OtherwiseTag (bitte Seite übersetzung).
InformationsquelleAutor Tires