2011-09-23 71 views
0

我有這個頁面:問題與C:的forEach內豐富:dataTable的

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 
    template="./templates/template.xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:rich="http://richfaces.org/rich" 
    xmlns:c="http://java.sun.com/jstl/core"> 

    <ui:define name="main_title">AO MMS Messages</ui:define> 
    <ui:define name="main"> 
    <rich:dataTable value="#{dataProviderBean.aoRequests}" var="item"> 
     <f:facet name="noData">No messages are available.</f:facet> 
     <rich:column> 
      <f:facet name="header">Profile</f:facet> 
       #{item.profile.username} 
      </rich:column> 
     <rich:column> 
      <f:facet name="header">Timestamp</f:facet> 
       #{item.timestamp} 
      </rich:column> 
     <rich:column> 
      <f:facet name="header">Recipient</f:facet> 
       #{item.recipient} 
      </rich:column> 
     <rich:column> 
      <f:facet name="header">Sender</f:facet> 
       #{item.sender} 
      </rich:column> 
     <rich:column> 
      <f:facet name="header">Text</f:facet> 
      <h:outputText value="Contents: #{item.getContentByStringType('text/plain')}" /> 
       <c:forEach var="content" items="#{item.getContentByStringType('text/plain')}"> 
       <h:outputText value="Content: #{content}" /> 
       </c:forEach> 
      </rich:column> 
     <rich:column> 
      <f:facet name="header">Headers</f:facet> 
       #{item.headers} 
      </rich:column> 
    </rich:dataTable> 
    </ui:define> 
</ui:composition> 

但列Text只打印此:

Contents: [TextContent [content=Hello World in MMS]] Content: 

爲何不遍歷列表?更多信息

Request類:

public class Request { 

    private Profile profile; 
    private Map<String, String> headers; 
    private Date timestamp; 
    private MessageType messageType; 
    private Map<String, ArrayList<Content>> contents; 

    public Request(MessageType messageType) { 
     this.messageType = messageType; 
     this.timestamp = new Date(); 
    } 

    public Profile getProfile() { 
     return profile; 
    } 

    public void setProfile(Profile profile) { 
     this.profile = profile; 
    } 

    public Map<String, String> getHeaders() { 
     return headers; 
    } 

    public void setHeaders(Map<String, String> headers) { 
     this.headers = headers; 
    } 

    public Date getTimestamp() { 
     return timestamp; 
    } 

    public void setTimestamp(Date timestamp) { 
     this.timestamp = timestamp; 
    } 

    public MessageType getMessageType() { 
     return messageType; 
    } 

    public void setMessageType(MessageType messageType) { 
     this.messageType = messageType; 
    } 

    public Map<String, ArrayList<Content>> getContents() { 
     return contents; 
    } 

    public void setContents(Map<String, ArrayList<Content>> contents) { 
     this.contents = contents; 
    } 

    public List<Content> getContentByStringType(String type) { 
     return contents.get(type); 
    } 

    public String getSender() { 
     return headers.get(HttpHeaders.X_NOKIA_MMSC_FROM.getValue()).replaceAll("/.*", ""); 
    } 

    public String getRecipient() { 
     return headers.get(HttpHeaders.X_NOKIA_MMSC_TO.getValue()).replaceAll("/.*", ""); 
    } 

    @Override 
    public String toString() { 
     return "Request [profile=" + profile + ", headers=" + headers + ", timestamp=" + timestamp 
       + ", messageType=" + messageType + ", contents=" + contents + "]"; 
    } 

} 

回答

2

使用ui:repeat,而不是在這種情況下c:forEach

c:forEach因爲你試圖參考VAR item未被定義(c:forEachTagHandler所以它試圖評估item樹正在興建時,不會在這裏工作; rich:dataTable是一個組件,它定義了var item只在渲染響應中)。

有關此事的更多信息,請閱讀以下文章:。 TagHandler vs Component

+0

現在很清楚。謝謝 – user219882

+0

不客氣! – Andrey