使用Thymeleaf在EL表达式中输入类型

时间:2013-05-23 07:24:58

标签: java type-conversion el type-erasure thymeleaf

如何在EL表达式中转换对象类型? Thymeleaf引擎似乎不明白这样的事情:

<span th:text="${((NewObjectType)obj).amount"></span>

感谢。

更新

我存储数据的类层次结构。它们用于填充HTML表。

public class RootBase implements Serializable {
    ...
}

public class ColBase<T extends RootBase> implements Serializable {

    private ArrayList<T> internalList;

    public int getSize() {
       ...
    }

    public T get(int index) {
       return internalList(index);
    }
}

public class Row extends RootBase {
    ...
}

public class Rows extends ColBase<Row> {
    ...
}

控制器:

Rows rowsColObj = xxxJaxProxyService.getRows();
model.addAttribute("rows", rowsColObj);

查看:

<table style="width:100%; border:solid 1px" th:if="${statement}">
  <thead>
    <tr>
      <th style="text-align: left">#</th>
      <th style="text-align: left">Amount</th>
    </tr>
  </thead>
  <tbody th:object="${rows}">
    <tr th:each="index : *{#numbers.sequence(0, size - 1)}" th:with="entry=${#object.get(index)}">
      <td th:text="${index} + 1">1</td>
      <td th:text="${entry.amount}">0</td>
    </tr>
  </tbody>
</table>

1 个答案:

答案 0 :(得分:0)

您可以将列表包装在您自己的模型中吗? SpringMVC和Thymeleaf的部分价值主张是从视图层中删除应用程序逻辑。转换是应用程序逻辑,应该在Controller中完成,或者如果你必须......模型。所以如果看起来像这样:

/**
 * Custom model for attributes displayed on the page.
 */    
MyPageModel
    List<TableRows> tableRows;
    public List<TableRows> getTableRows(){...}
    ...

接下来,在控制器方法中添加模型。以下是如何在模板中将模型绑定到html表:

<table>
    <tr th:each="tableRow : ${model.tableRows}">
        <td class="date" th:text="${tableRow.amount}">$103</td>
    </tr>
    <tr th:unless="*{tableRow}">
        <td colspan="3">No amounts available</td>
    </tr>
</table>