2010-08-20 63 views
0

我正在使用Spring Roo。有table:tabletable:column标签。在表标签(Spring Roo提供的标签库)中显示子属性

如何在表格中显示colections元素的子属性?

在简单的方式,它不工作:

<table:table data="${knowledgebase.concepts}" id="l_domain_Concept" path="/concepts" z="user-managed"> 
    <table:column id="c_domain_Concept_translations" property="defaultTranslation.name" z="user-managed" /> 
</table:table> 

例外:

Caused by: javax.el.PropertyNotFoundException: Property 'defaultTranslation.name' not found on type domain.data.Concept 

回答

1

我修改table.tagx因此它可能与子属性和Spring转换功能可以使用。

<c:forTokens items="${columnProperties}" delims="," var="column" varStatus="num"> 
<c:set var="prop" value="${ item }" /> 
    <c:forTokens items="${column}" delims="." var="subprop"> 
     <c:set var="prop" value="${ prop[subprop]}" /> 
    </c:forTokens> 
<c:set var="columnMaxLength" value="${lengths[num.count - 1]}" scope="request"/> 
<td> 
    <c:choose> 
     <c:when test="${not convert}"> 
      <c:out value="${columnMaxLength lt 0 ? prop : fn:substring(prop, 0, columnMaxLength)}" /> 
     </c:when> 
     <c:otherwise> 
      <spring:eval expression="prop" /> 
    </c:otherwise> 
    </c:choose> 
</td> 

+0

谢谢,我有同样的问题。但我用这个逻辑和它的工作。这是什么c:当test =“$ {not convert}”条件检查? – 2011-11-29 04:51:09

+0

它是使用Spring转换功能的标志。它是jsp指令属性之一。 – abele 2011-11-29 05:32:31

+0

@abele,这只会工作在单一级别的子属性上,还是能够降低多个子属性级别,例如:employee.supervisor.name – ThatGuyGrant 2015-10-29 09:40:45

0

编辑PROJECT/src/main/webapp/WEB-INF/tags/form/fields/table.tagx。在78行,你应该看到<c:set var="columnDatePattern" value="${patterns[num.count-1]}" />

<!-- Get the last descendant property --> 
<c:set var="prop" value="${item}" /> 
<c:forTokens items="${column}" delims="." var="subprop"> 
    <c:if test="${not empty prop}"> 
     <c:set var="prop" value="${prop[subprop]}" /> 
    </c:if> 
</c:forTokens> 
<!-- Now under tag c:choose below, please change from "item[column]" into "prop" --> 
<!-- // End of Get the last descendant property. --> 

不要忘记从"item[column]"变成"prop":在该行,下面的代码把。例如,更改的行应该是:

<c:choose> 
    <c:when test="${columnType eq 'date'}"> 
     <spring:escapeBody> 
      <fmt:formatDate value="${prop}" pattern="${fn:escapeXml(columnDatePattern)}" var="colTxt" /> 
     </spring:escapeBody> 
    </c:when> 
    <c:when test="${columnType eq 'calendar'}"> 
     <spring:escapeBody> 
      <fmt:formatDate value="${prop.time}" pattern="${fn:escapeXml(columnDatePattern)}" var="colTxt"/> 
     </spring:escapeBody> 
    </c:when> 
    <c:otherwise> 
     <c:set var="colTxt"> 
      <spring:eval expression="prop" htmlEscape="false" /> 
     </c:set> 
    </c:otherwise> 
</c:choose> 
0

您可以编辑实体文件Concepts.java:

@Transient 
public String getDefaultTranslationName(){ 
     return defaultTranslation.getName(); 
} 

后,您编辑到:

<table:column id="c_domain_Concept_translations" property="DefaultTranslationName" z="user-managed" /> 

希望能帮助你!