use*_*951 1 datatable jsf enums selectonemenu omnifaces
我有一个RoleStatus枚举,它作为Role实体的属性映射到DB中的整数(但该部分是无关紧要的).我想提出一个List<Role>在<p:dataTable>其中一列应该有一个<h:selectOneMenu>对RoleStatus的财产Role实体.如何使用或不使用OmniFaces实现此功能?
这是枚举:
public enum RoleStatus {
ACTIVE(1, "Active"),
DISABLE(2, "Disable");
private final int intStatus;
private final String status;
private RoleStatus(int intStatus, String status) {
this.intStatus = intStatus;
this.status = status;
}
public int getIntStatus() {
return status;
}
public String getStatus() {
return status;
}
}
Run Code Online (Sandbox Code Playgroud)
这是支持bean:
@ManagedBean
@ViewScoped
public class RoleController {
private List<Role> roles;
@ManagedProperty("#{roleService}")
private IRoleService roleService;
@PostConstruct
public void init() {
roles = roleService.getRoles();
}
public List<Role> getRoles() {
return roles;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,数据表我想要实体<h:selectOneMenu>的RoleStatus属性Role,显示所有可用的枚举值作为选择项目选项.
<h:form id="roleForm">
<p:dataTable value="#{roleController.roles}" var="role">
<p:column>
<h:outputText value="#{role.roleid}" />
</p:column>
<p:column>
<h:inputText value="#{role.role}" />
</p:column>
<p:column>
<h:inputText value="#{role.description}" />
</p:column>
<p:column>
<h:selectOneMenu value="#{role.roleStatus}">
<!-- How??? -->
</h:selectOneMenu>
</p:column>
</p:dataTable>
</h:form>
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我需要OmniFacesSelectItemsConverter吗?
你不需要转换器.JSF已经有一个内置的枚举转换器.
如果没有OmniFaces,您可以将枚举值作为以下可用项提供<h:selectOneMenu>:
将此方法添加到RoleController:
public RoleStatus[] getRoleStatuses() {
return RoleStatus.values();
}
Run Code Online (Sandbox Code Playgroud)
这样,所有枚举值都可用#{roleController.roleStatuses}.
然后使用此下拉列表:
<h:selectOneMenu value="#{role.roleStatus}">
<f:selectItems value="#{roleController.roleStatuses}" var="roleStatus"
itemValue="#{roleStatus}" itemLabel="#{roleStatus.status}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
注意:由于这些值是静态/应用程序范围的,因此将方法移动到单独的@ApplicationScopedbean 并不会有什么坏处.
使用OmniFaces,您可以删除额外的getter并直接通过<o:importConstants>以下方式导入枚举:
将它添加到模板顶部的某处(假设它在com.example包中):
<o:importConstants type="com.example.RoleStatus" />
Run Code Online (Sandbox Code Playgroud)
这样,枚举类本身就可以使用#{RoleStatus}(注意大小写!).
然后使用此下拉列表:
<h:selectOneMenu value="#{role.roleStatus}">
<f:selectItems value="#{RoleStatus.values()}" var="roleStatus"
itemValue="#{roleStatus}" itemLabel="#{roleStatus.status}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
4197 次 |
| 最近记录: |