我有一个p:dataTable。它包含项目列表。项属于Java Bean类“ Item.java”类。它具有3个属性:id(整数,唯一标识符),名称(字符串),值(整数),getter和setter。数据表有3列:
项目名称
商品价值
p:commandButton,值为“更改”;按下按钮时,将显示p:对话框,其中包含一条消息(您要更新#{i.name}),h:inputText(必须在其中添加新值)和Submit按钮。当我按下“提交”时,它在类ItemsView.java中称为方法“ changeValue(Item item)”。
此刻,p:datatable包含3个项目,“ item1”,“ item2”,“ item3”,并且都具有值0。我想将值“ 5”更新为“ item2”。当它被称为方法“ changeValue(Item item)”时,该项是正确的,但该值仍为0,并且更新未完成。
这是xhtml页面和Java类:
<h:body>
<h:form id="listItemsForm" prependId="false">
<p:dataTable id="itemEntitiesTable" var="i" value="#{itemsView.items}">
<p:column headerText="Name">
<h:outputText value="#{i.name}" />
</p:column>
<p:column headerText="Value">
<h:outputText value="#{i.value}" />
</p:column>
<p:column headerText="Update value">
<p:commandButton value="Change" onclick="PF('changeValue#{i.id}').show();" >
<f:setPropertyActionListener target="#{itemsView.selectedItem}" value="#{i}"/>
</p:commandButton>
<p:dialog header="Update value" widgetVar="changeValue#{i.id}" modal="true" height="150" >
You want to update #{i.name}
<br/><br/>
<h:outputLabel value="New value: * " />
<h:inputText id="itemValue" required="true" label="itemValue" value="#{i.value}" />
<br/><br/>
<h:commandButton type="submit" id="updateItem" value="Change" action="#{itemsView.changeValue(i)}" />
</p:dialog>
</p:column>
</p:dataTable>
</h:form>
</h:body>
以及与dataTable关联的Java类:
@ManagedBean
@ViewScoped
public class ItemsView implements Serializable {
private List<Item> items;
@ManagedProperty("#{selectedItem}")
private Item selectedItem;
@PostConstruct
public void init() {
items = // a list of 3 items - ("item1", 0), ("item2", 0), ("item3", 0)
}
// getters and setters
public String changeValue(Item item) {
System.out.println(item.getName()); // name of the selected item, which is correct
System.out.println(item.getValue()); // 0 (the old value, not 5, as I expected)
// some code, to persist the new value in database, not relevant for this question
return "success";
}
}
对我来说,此刻的范围是当我用5更改项目的值时,即“ System.out.println(item.getValue());”行。将显示“ 5”。出于业务逻辑原因,我不想直接在单元格中更改该值(无p:dialog)。