Datatable drucken nur das erste Element aus, wenn der Wert Attribut eckige Klammer enthält

stimmen
1

Ich habe ein , h:dataTabledie anzeigt , ProfileNotificationwie unten:

        <h:dataTable value=#{myBean.profileNotifications} var=item
                     rendered=#{myBean.renderProfileNotification}>
            <h:column>
                <h:form>                        
                    <h:outputText value=#{item.userName} />
                    <h:outputText value=commented on your profile. />
                    <!-- <h:outputText value=[#{item.createTime}]/> -->
                </h:form>
            </h:column>                
        </h:dataTable>

wenn ich das nicht haben item.createTime, wenn ich ein Klicken commandLinkzu setzen renderProfileNotification=true, drucken Sie es 4 Einzelteile. Wenn ich jedoch unkommentiert item.createTime, nur das es ausdrucken 1 Artikel, das erste Element .

EDIT: Das Problem ist , das im []Innern value. Da BalusC vermutet , dass dies ein EL - Fehler ist, dass ich meine Fehler in einem kleinen, gut lesbaren und reproduzierbaren Code reproduzieren. Dieser Code läuft auf Glassfish v3.0.1 b22

index.xhtml

<html xmlns=http://www.w3.org/1999/xhtml
  xmlns:f=http://java.sun.com/jsf/core
  xmlns:h=http://java.sun.com/jsf/html
  xmlns:p=http://primefaces.prime.com.tr/ui>
<h:head>
    <meta http-equiv=Content-Type content=text/html; charset=UTF-8/>
    <title>TODO supply a title</title>
</h:head>
<h:body>
    <h:form id=table>
        <h:dataTable   value=#{myBean.temp} var=item rendered=#{myBean.display}>
            <h:column>
                <h:outputText value=[#{item}]/>
            </h:column>
        </h:dataTable>            
    </h:form>
    <h:form>
        <p:commandLink value=Display actionListener=#{myBean.setDisplay} update=table/>
    </h:form>
</h:body>
</html>

myBean.java

@ManagedBean(name=myBean)
@SessionScoped
public class myBean {

List<String> temp = null;

public myBean() {
}

private boolean display = false;

@PostConstruct
public void init(){
    temp = new ArrayList<String>();
    temp.add(0, Tom);
    temp.add(1, Peter);
    temp.add(2, Mike);
    temp.add(3, Fox);
}

public List<String> getTemp() {
    return temp;
}

public void setTemp(List<String> temp) {
    this.temp = temp;
}

public boolean isDisplay() {
    return display;
}

public void setDisplay() {
    this.display = !this.display;
}
}
Veröffentlicht am 27/09/2010 um 19:59
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
1

OK, es ist die letzte , ]die Probleme verursacht. Beim Benutzen

<h:outputText value="[#{item}]"/>

die XML-Antwort des Ajax-Request ist wie folgt:

<?xml version="1.0" encoding="UTF-8"?><partialResponse><components><component><id>table</id><output><![CDATA[
<form id="table" name="table" method="post" action="/playground/test.jsf" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="table" value="table" />
<table>
<tbody>
<tr>
<td>[Tom]]]><![CDATA[</td>
</tr>
<tr>
<td>[Peter]]]><![CDATA[</td>
</tr>
<tr>
<td>[Mike]]]><![CDATA[</td>
</tr>
<tr>
<td>[Fox]]]><![CDATA[</td>
</tr>
</tbody>
</table>
~com.sun.faces.saveStateFieldMarker~
</form>]]></output></component></components><state><![CDATA[<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="8834103461195979522:5904029216967015556" autocomplete="off" />]]></state><callbackParams><callbackParam>{"validationFailed":false}</callbackParam></callbackParams></partialResponse>

Beachten Sie die unnötigen CDATA-Blöcke.

Und bei der Verwendung von

<h:outputText value="[#{item})"/>

die XML-Antwort des Ajax-Request ist wie folgt:

<?xml version="1.0" encoding="UTF-8"?><partialResponse><components><component><id>table</id><output><![CDATA[
<form id="table" name="table" method="post" action="/playground/test.jsf" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="table" value="table" />
<table>
<tbody>
<tr>
<td>[Tom)</td>
</tr>
<tr>
<td>[Peter)</td>
</tr>
<tr>
<td>[Mike)</td>
</tr>
<tr>
<td>[Fox)</td>
</tr>
</tbody>
</table>
~com.sun.faces.saveStateFieldMarker~
</form>]]></output></component></components><state><![CDATA[<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="502405171373727621:5591448575905434431" autocomplete="off" />]]></state><callbackParams><callbackParam>{"validationFailed":false}</callbackParam></callbackParams></partialResponse>

Dies läuft darauf hinaus, das folgende Problem , verursacht durch: die ajax Antworthandler ist nicht notwendig , ein Schließ- und CDATA Block für einen Ausgangs ]in Teilantwort und die XML - Antwort JS Parser nimmt nur die erste für die Anzeige. Eine einfache Abhilfe war zu platzieren ]außerhalb der Wertausdruck:

<h:outputText value="[#{item}"/>]

was in der folgenden XML-Antwort:

<?xml version="1.0" encoding="UTF-8"?><partialResponse><components><component><id>table</id><output><![CDATA[
<form id="table" name="table" method="post" action="/playground/test.jsf" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="table" value="table" />
<table>
<tbody>
<tr>
<td>[Tom]
            </td>
</tr>
<tr>
<td>[Peter]
            </td>
</tr>
<tr>
<td>[Mike]
            </td>
</tr>
<tr>
<td>[Fox]
            </td>
</tr>
</tbody>
</table>
~com.sun.faces.saveStateFieldMarker~
</form>]]></output></component></components><state><![CDATA[<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-1679996061683473780:1967669133311943592" autocomplete="off" />]]></state><callbackParams><callbackParam>{"validationFailed":false}</callbackParam></callbackParams></partialResponse>

Ich bin mir noch nicht sicher, wo das Problem wurzelt, in den Ajax-Antwort-Handler oder in dem JS-XML-Antwort-Parser, aber jetzt wissen wir wenigstens die Ursache. Ich werde um ein Problem zu den Mojarra Jungs berichten früher oder später einmal festgenagelt.


Update : OK, ich genagelt es weiter nach unten: Es ist die PrimeFaces' Ajax - Antwort - Handler und JS XML - Parser , die dies falsch zu tun. Wenn ein Mojarra der Verwendung h:commandLinkstatt p:commandLinkes funktioniert gut.

<h:commandLink value="Display" actionListener="#{myBean.setDisplay}">
    <f:ajax render=":table" />
</h:commandLink>

Mojarra AJAX - Antwort - Handler druckt nicht unnötig CDATA Blöcke nach jedem ]. Das könnte die Ursache in PrimeFaces sein.


Update : Ausgabe berichtet PF Jungs: http://code.google.com/p/primefaces/issues/detail?id=1282

Beantwortet am 27/09/2010 um 22:54
quelle vom benutzer

stimmen
1

Ich stelle dar , was falsch ist. Scheinbare, Putting []innen valueAttribut ist schlecht. Was ich habe , ist dies:

<h:outputText value="[#{item.createTime}]"/>

wenn ich das herausnehmen [], werden

<h:outputText value="#{item.createTime}"/>

dann fein alles funktionieren. Muss eines der Sonderzeichen Sache sein.

Beantwortet am 27/09/2010 um 21:16
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more