我正在尝试将一个简单的复选框附加到primefaces中的datalist。该复选框供用户对采购订单进行多次审批。当我没有附上复选框时,我点击了数据列表并成功转到下一页。但是当我附上复选框时,它不成功。任何帮助将不胜感激。谢谢!
前端Xhtml:
<p:dataList id="poList" value="#{purchaseOrder.purchaseOrders}"
var="po" type="inset">
<f:attribute name="filter" value="true" />
<f:attribute name="placeholder" value="Search" />
<f:attribute name="autoDividers" value="true" />
<f:attribute name="icon" value="grid" />
<f:attribute name="iconSplit" value="true" />
<h:outputLabel for="name" value="Standard Label:" />
<p:column>
<p:commandLink id="poItem" action="pm:poDetails?transition=slide"
update=":poDetailsForm:content" styleClass="selection">
<f:setPropertyActionListener value="#{po}"
target="#{purchaseOrder.po}" />
#{po.poNumber}9 for #{po.vendorName} at <br />
<font color='red'>#{po.moneyValue}</font>
<p:column>
<p:selectBooleanCheckbox id="ApprovePOcb" value=""
itemLabel="Approve" />
</p:column>
</p:commandLink>
</p:column>
<f:facet name="footer">
<strong>#{fn:length(purchaseOrder.purchaseOrders)} PO(s)</strong>
</f:facet>
</p:dataList>
PurchaseOrderMBean:
public class PurchaseOrderMBean implements Serializable
{
List<PurchaseOrder> purchaseOrderList;
PurchaseOrder selectedPo;
public PurchaseOrderMBean()
{
purchaseOrderList = new ArrayList<PurchaseOrder>();
purchaseOrderList.add(
new PurchaseOrder(232324, "ABC", "USD" , 500000.00, "LargeCap"));
purchaseOrderList.add(
new PurchaseOrder(43342, "XYZ", "USD", 700000.00, "MediumCap"));
}
public List<PurchaseOrder> getPurchaseOrders()
{
List<PurchaseOrder> pendingPos = new ArrayList<PurchaseOrder>();
for (PurchaseOrder po : purchaseOrderList)
{
if ((po.getStatus().equals("PEN")))
{
pendingPos.add(po);
}
}
return pendingPos;
}
public void setPo(PurchaseOrder po)
{
selectedPo = po;
System.out.println("PO selected: " + po);
}
public PurchaseOrder getPo()
{
return selectedPo;
}
public void savePurchaseOrder()
{
System.out.println("savePurchaseOrder() called");
}
public void setUpdateStatus(String poid)
{
System.out.println("setUpdateStatus() called");
PurchaseOrder po=(PurchaseOrder)getPurchaseOrder(poid);
po.setStatus("APPROVE");
System.out.println("setUpdateStatus() updated");
}
public String getUpdateStatus()
{
return "";
}
public PurchaseOrder getPurchaseOrder(String poid)
{
PurchaseOrder po=null;
System.out.println("getPurchaseOrder() called");
for (int i=0;i<this.getPurchaseOrders().size();i++)
{
po=(PurchaseOrder)getPurchaseOrders().get(i);
if (po.getPoNumber()==Long.parseLong(poid))
break;
}
System.out
.println("getPurchaseOrder() po returned");
return po;
}
public String gotoDetails()
{
return "po_details?transition=slide";
}
}
当我添加复选框时,我就陷入困境。一直在努力。
答案 0 :(得分:0)
添加以调用bean并执行rederict, 像这样:
<p:selectBooleanCheckbox id="ApprovePOcb" value="" itemLabel="Approve" />
<p:ajax event="change" listener="#{bean.checkboxChanged}"/>
</p:column>
并在bean中执行:
public class bean implements Serializable {
//all variabile and methode
public void checkboxChanged() {
try {
FacesContext.getCurrentInstance()
.getExternalContext().redirect("./page.jsf");
}
catch (IOException e) {
//error
}
}
}