我喜欢这个场景:
我正在使用primefaces数据表p:datatable
,它从托管bean接收一个列表...
请查看此示例:并注意标题“status”
<p:datatable styleClass="table1" id="listTable" var="t" value="{testBean.elements}">
<p:column headerText="Request No.">
<h:outputText value="#{t.part_request_no}"></h:outputText>
</p:column>
<p:column headerText="Request No.">
<h:outputText value="#{t.part_request_date}"></h:outputText>
</p:column>
<!--please pay attention here -->
<p:column headerText="status">
<h:outputText value="#{t.part_status}"></h:outputText>
</p:column>
</p:datatable>
结果如下:这个
Request No. | Request Date | Status |
1 | 2013-02-02 | 1 |
2 | 2013-01-01 | 2 |
3 | 2013-4-23 | 5 |
我的问题是:代表1,2,5是一种耻辱。所以我更喜欢查看像
这样的状态我需要的结果
Request No. | Request Date | Status |
1 | 2013-02-02 | New |
2 | 2013-01-01 | Rejected |
3 | 2013-4-23 | Canceled |
任何想法???? 谢谢....
答案 0 :(得分:2)
根据您希望如何以及在何处维护状态代码和相关描述之间的映射,有几种方法。
在视图中硬编码。
<h:outputText value="New" rendered="#{t.part_status == 1}" />
<h:outputText value="Rejected" rendered="#{t.part_status == 2}" />
<h:outputText value="Cancelled" rendered="#{t.part_status == 5}" />
在地图中硬编码。
@ManagedBean
@ApplicationScoped
public class Data {
private static final Map<Long, String> STATUSES = createStatuses();
private static Map<Long, String> createStatuses() {
Map<Long, String> statuses = new HashMap<Long, String>();
statuses.put(1L, "New");
statuses.put(2L, "Rejected");
statuses.put(5L, "Cancelled");
return Collections.unmodifiableMap(statuses);
}
public Map<Long, String> getStatuses() {
return STATUSES;
}
}
与
<h:outputText value="#{data.statuses[t.part_status]}" />
在loclaized资源包文件中定义。
status.1 = New
status.2 = Rejected
status.5 = Cancelled
与
<f:loadBundle basename="com.example.i18n.text" var="text" />
...
<c:set var="statusKey" value="status.#{t.part_status}" />
<h:outputText value="#{text[statusKey]}" />
在枚举中定义。
public enum Status {
New(1), Rejected(2), Cancelled(5);
private int code;
private Status(int code) {
this.code = code;
}
public static Status of(int code) {
for (Status status : values()) {
if (status.code == code) {
return status;
}
}
throw new IllegalArgumentException();
}
public int getCode() {
return code;
}
}
并在填充模型期间
t.setPart_status(Status.of(statusCode));
然后只是在视图中
<h:outputText value="#{t.part_status}" />
组合也可以。例如。枚举中的i18n标签。
无关,我会处理你的Java naming conventions。 part_status
不是有效的属性名称。它应该是partStatus
。
答案 1 :(得分:0)
为什么不在ManagedBean中创建一个方法来将其转换为您想要的标签?
<p:column headerText="status">
<h:outputText value="#{testBean.getStatusLabel(t.part_status)}"/>
</p:column>
在ManagedBean上:
public String getStatusLabel(int code){
// Do your thing here...
}