- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于 LazyDataModel 的 Primefaces DataTable。我成功地在表中加载数据,但无法使用 setPropertyActionListener 在对话框中显示所选项目,也无法编辑行。我正在使用请求范围,我注意到这个问题似乎在 session 范围中得到了解决,但我宁愿使用前者( View 范围甚至不会在表中加载数据)。我已经尝试重写 getRowData 和 getRowKey 方法,但它们甚至没有被调用。当我不使用惰性模型方法时,我就没有这些问题。
这可能是我遗漏的与注入(inject)相关的问题,或者 LazyDataModel 在 session 范围之外无法工作?
public class LazyDataModelBase<T> extends LazyDataModel<T> {
private volatile AbstractFacade<T> facade;
public LazyDataModelBase(AbstractFacade<T> facade) {
super();
this.facade = facade;
}
public final AbstractFacade<T> getFacade() {
return facade;
}
public final void setFacade(AbstractFacade<T> facade) {
this.facade = facade;
}
@Override
public List<T> load(int first, int pageSize, String sortField,
SortOrder sortOrder, Map<String, String> filters) {
List<T> list = facade.load(first, pageSize,
sortField, sortOrder, filters);
if (list == null) {
throw new RuntimeException("Problem.");
}
// I am using the following line for debugging:
// throw new RuntimeException(list.toString());
setRowCount(facade.count());
return list;
}
}
UserLazyDataModel 看起来像这样
public class UserLazyDataModel extends LazyDataModelBase<User> {
private UserFacade facade;
public UserLazyDataModel(UserFacade facade) {
super(facade);
}
public List<User> getRowData(String rowKey) {
return facade.findById(Integer.parseInt(rowKey)); // findById as defined in UserFacade
}
...
我的支持 bean 看起来像这样
@Named(value = "userController")
@RequestScoped
public class UserController implements Serializable {
private User current;
@EJB
private UserFacade ejbFacade;
private LazyDataModelBase<User> items;
private Integer itemId;
private int pageSize = 10;
public UserController() {
items = new UserLazyDataModel(ejbFacade);
}
public UserFacade getUserFacade() {
return ejbFacade;
}
public void setUserFacade(UserFacade facade) {
this.ejbFacade = facade;
//items.setFacade(facade);
}
public User getSelected() {
if (current == null) {
this.current = new User();
}
return current;
}
public void setSelected(User selected) {
this.current = selected;
}
public void setSelected(Integer id) {
this.itemId = id;
current = ejbFacade.find(id);
}
public Integer getItemId() {
return itemId;
}
public void setItemId(Integer id) {
this.itemId = id;
current = ejbFacade.findById(id);
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
private void setDefaultStatus() {
current.setStatusId(ejbFacade.getDefaultStatus());
}
public String create() {
current.setDateCreated(new Date());
if (current.getStatusId() == null) {
setDefaultStatus();
}
current.hashPassword();
try {
ejbFacade.create(current);
JsfUtil.addSuccessMessage("User guardado exitosamente");
return "success-create";
} catch (Exception e) {
JsfUtil.addErrorMessage(e, "A persistence error ocurred.");
return null;
}
}
public String prepareList() {
//current = null;
return "index?faces-redirect=true";
}
public String prepareCreate() {
return "create?faces-redirect=true";
}
public String prepareEdit() {
return "edit";
}
public void onRowSelect() {
current = ejbFacade.findById(itemId);
}
public void update() {
try {
ejbFacade.edit(current);
JsfUtil.addSuccessMessage("User guardado exitosamente");
} catch (Exception e) {
JsfUtil.addErrorMessage(e, "A persistence error ocurred.");
}
}
public void delete() {
try {
ejbFacade.remove(current);
current = null;
JsfUtil.addSuccessMessage("role deleted");
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
}
}
public LazyDataModelBase<User> getItems() {
items.setFacade(ejbFacade);
items.setPageSize(pageSize);
return items;
}
public void setItems(LazyDataModelBase<User> model) {
this.items = model;
}
}
这是我的观点
<h:form prependId="false">
<p:commandButton immediate="true" style="margin: 10px 0;" value="Nuevo" icon="ui-icon-plus" action="#{userController.prepareCreate}" ajax="false" />
</h:form>
<h:form id="listForm">
<br />
<p:growl id="messages" showDetail="true"/>
<p:dataTable var="item" value="#{userController.items}" rows="#{userController.pageSize}"
lazy="true" selectionMode="single" rowKey="#{item.userId}" selection="#{userController.selected}"
paginator="true" id="itemsTable" rowsPerPageTemplate="10,30,50">
<p:ajax event="rowSelect" listener="#{userController.onRowSelect}" update=":listForm:itemDisplay" oncomplete="itemDialog.show()" />
<p:column headerText="ID" id="userId" sortBy="#{item.userId}" style="width: 10px;">
#{item.userId}
</p:column>
<p:column headerText="First Name" id="first-name" sortBy="#{item.firstName}">
#{item.firstName}
</p:column>
<p:column headerText="Last Name" id="last-name" sortBy="#{item.lastName}">
#{item.lastName}
</p:column>
<p:column headerText="Email" id="email" sortBy="#{item.email}" filterBy="#{item.email}">
#{item.email}
</p:column>
<p:column headerText="User" id="name" sortBy="#{item.username}">
#{item.username}
</p:column>
<p:column headerText="birthdate" id="birthdate" sortBy="#{item.birthdate}">
<h:outputText value="#{item.birthdate}" >
<f:convertDateTime type="date" pattern="yyyy/MM/dd"/>
</h:outputText>
</p:column>
<p:column headerText="role" id="status" sortBy="#{item.statusId.name}">
#{item.statusId.name}
</p:column>
<p:column style="width:32px;">
<h:panelGrid columns="3" class="datarow-icons">
<p:commandButton icon="ui-icon-trash" update=":listForm:itemsTable :listForm:confirmDelete"
oncomplete="deleteDialog.show()">
<f:setPropertyActionListener value="#{item}" target="#{userController.selected}" />
</p:commandButton>
<p:commandButton icon="ui-icon-pencil" immediate="true" action="#{userController.prepareEdit}" ajax="false">
<f:setPropertyActionListener value="#{item}" target="#{userController.selected}" />
</p:commandButton>
<p:commandButton id="select-button"
update=":listForm:itemDisplay"
oncomplete="itemDialog.show()" icon="ui-icon-search"
title="view" >
<f:setPropertyActionListener value="#{item}" target="#{userController.selected}" />
</p:commandButton>
</h:panelGrid>
</p:column>
</p:dataTable>
<p:dialog widgetVar="itemDialog" resizable="false"
showEffect="explode" hideEffect="explode" header="Item Detail">
<p:panelGrid columns="2" id="itemDisplay" style="width: 250px;">
<h:outputText value="ID: " />
<h:outputText value="#{userController.selected.userId}" />
<h:outputText value="Name: " />
<h:outputText value="#{userController.selected.username}" />
<h:outputText value="Description: " />
<h:outputText value="#{userController.selected.firstName}" />
</p:panelGrid>
</p:dialog>
<p:confirmDialog id="confirmDelete" header="Confirm delete"
widgetVar="deleteDialog" severity="alert"
showEffect="fade" hideEffect="fade"
closable="false"
message="¿Realmente desea borrar '#{userController.selected.toString()}' ?">
<p:commandButton id="decline" value="Not Yet"
onclick="deleteDialog.hide();" type="button" />
<p:commandButton id="accept" value="Confirmar"
update=":listForm"
oncomplete="deleteDialog.hide();"
action="#{userController.delete}" ajax="false">
</p:commandButton>
</p:confirmDialog>
</h:form>
最佳答案
我设法通过重写 UserLazyDataModel(我展示的 LazyDataModelBase 的子类)中的 getRowData 来使 rowSelect 工作,如下所示:
@Override
public User getRowData(String rowKey) {
try {
return ((UserFacade) getFacade()).findById(Integer.parseInt(rowKey));
} catch (Exception e) {
return null;
}
}
并删除
rowkey="#{item.userId}"
来自 dataTable 声明的属性。我在子类 UserLazyDataModel 中声明了一个外观,默认情况下它与父类 LazyDataModelBase 不同(设置为 null)。解决方案是从子类中删除该字段,并通过 getFacade 方法访问父字段,最后将其强制转换为 UserFacade。
setPropertyActionListener 尚未工作。
关于java - Primefaces DataTable+LazyDataModel 不会在请求范围内传递 setPropertyActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713709/
我想为每个条显示不同颜色的 primefaces 条形图。我得到的最接近的就像图像: 我想用不同的颜色来表示这些条,比如绿色代表“准时”,黄色代表“警告”,红色代表“逾期” 我尝试使用 model.s
我对 Primefaces 3 对话框的构造感到困惑。 我在 SO 中看到了具有这种模式的问题。表单在对话框之外。 但另一个问题有这个。 Primef
我尝试使用一个简单的gmap示例开始开发Web应用程序,但是它对我不起作用。 我使用了在网页上找到的示例电影收藏家。我只在template.html文件中包含了这个代码。 我收到此错误: javax.
我正在使用 primefaces 3.0。我有三个文本字段,其中任何一个都是必需的。我如何在 primefaces 中验证这一点。请帮忙..谢谢 最佳答案 通常,当在组件上使用自定义 f:valida
我正在尝试为 primefaces 选择列表创建自定义过滤器。当我按照手册中的说明进行操作时,我在 primefaces 的某处遇到了 TypeError。 我对picklist的定义 我的过滤
我正在努力处理primefaces日历。我需要的是,如果今天是 2011 年 7 月 28 日,我可以限制用户选择 7 月 28 日之前 1 年和 7 月 28 日之后 3 年的日期。 我查看了 pr
有没有办法删除 p:datatable 标题上的全选复选框。 我需要单个行上的复选框,而不是标题上的复选框。 最佳答案 这非常有效: .ui-chkbox.ui-chkbox-all.ui-widge
Primefaces 3.5,Mojarra 2.1.14。这是我的 PF 数据表,它包含一个名为“自动”的不可编辑 bool 列和可编辑的“标签”列:
我想在向导的最后一个选项卡上隐藏后退按钮。 我正在使用素面。它的解决方案是什么? 谢谢 最佳答案 您可以使用 jQuery 在客户端执行此操作: 假设您正在使用展示中的向导:http://www.pr
如果我在 PrimeFaces 数据表中设置属性“scrollable=true”,它可以垂直滚动。但是可以水平滚动这个表格吗? 最佳答案 Primefaces 支持在数据表上水平滚动。只需像这样指定
我有这个代码。在用户选择一行并关闭对话框之后,它将触发rowSelect事件。在我更新为primfaces 3.3(我安装了ver3.2)之前,它工作得很好。我在控制台中没有任何异常,当我调试时,我看
是否存在任何方法来设置 primefaces 的日历组件的年份列表? 最佳答案 对于年份列表,您可以使用 navigator="true" p:calendar 中素面的属性标记和年份范围 c-100
我正在使用 primefaces 3.2。我已经准备好了向导,可以在数据表的同一页面上插入用户信息。向导逐个选项卡获取信息并在确认选项卡上提交。它还将反射(reflect)在数据表的同一页面上。它运行
我有一个 p:treeTable,树内容都在一列中。该树是一个共享组件,因此我的某些页面需要列标题,而有些则不需要。在列标题为空的页面中,它为列标题创建一个空行,这是我不想要的。我确实想要列内容,只是
我使用的是primefaces 3.4,我在 p:overlaypanel 中有一个 p:calendar 。当我选择日期时,覆盖面板关闭(使用 Google Chrome 时)当我使用 Firefo
当我使用日历时,我将“timeOnly”设置为“true”,将“pattern”设置为“HH:mm a”。 当输入时间大于或等于“13:00 pm”时,日历每次获得焦点,都会 自动将时间更改为“23:
我也在尝试获取枚举“CityCodes.java”中定义的城市代码,这是我的枚举类,我的定义如下: public enum Cities { AL("Alabama","1"), AK("Alaska
在 PrimeFaces 展示页面上有一个简单的标题栏,适合实际主题。我的意思是此页面上的“欢迎来到 PrimeFaces 展示”文本:http://www.primefaces.org/showca
是否可以在 Primefaces 中创建垂直菜单栏? 我习惯了像 Ext-JS 这样简单的纯 AJax 框架,但到目前为止我还没有在 PF 中看到这样的组件。 谢谢, 乔 最佳答案 它被称为分层菜单。
是否可以设置 Primefaces 的 ScrollPanel 的滚动速度? Scrollpanel 在“ native ”模式下的滚动速度可以,但在“默认”模式下不行。 我使用的是 Primefac
我是一名优秀的程序员,十分优秀!