gpt4 book ai didi

java - c :forEach inside rich:dataTable 的问题

转载 作者:行者123 更新时间:2023-12-02 08:10:24 27 4
gpt4 key购买 nike

我有这个页面:

<?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:

为什么它不迭代列表?

请求类(class)以获取更多信息:

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 + "]";
}

}

最佳答案

在这种情况下,请使用 ui:repeat 而不是 c:forEach

c:forEach 在这里不起作用,因为您试图引用未定义的 var item (c:forEach 是一个 TagHandler 因此它在构建树时尝试评估 itemrich:dataTable 是一个组件,它定义了 var item 仅在渲染响应上)。

有关此事的更多信息,您可以阅读以下文章:。 TagHandler vs Component

关于java - c :forEach inside rich:dataTable 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7529046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com