[英]how to get the prime face auto complete object in to backing bean
我需要在用戶單擊“添加”按鈕時將質數自動完成對象發送到支持Bean中。 在這種情況下,primeface自動完成功能會正常工作。 但是在將所選對象發送到支持Bean時,它總是給我一個空指針
這是我的頁面
<h:form id="orderForm" >
<p:outputLabel value="Item : " for="acItem" />
<p:autoComplete id="acItem" value="#{orderController.item}" completeMethod="#{orderController.completeItem}"
var="item" itemLabel="#{item.itemDescription}" itemValue="#{item}" converter="itemConverter" forceSelection="true" />
<p:outputLabel value="Qty : " for="itemQty" />
<p:inputText id="itemQty" value="#{orderController.quantity}"/>
<p:commandButton id="add" value="AddItem" update="dataTable" actionListener="#{orderController.addItemsToDataTable(item)}"/>
<p:dataTable id="dataTable" value="#{orderController.orderdItems}" var="item" paginator="true" rows="10">
<p:column>
<f:facet name="header">
<h:outputText value="Item ID"/>
</f:facet>
<h:outputText value="#{item.itemId}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Item Code"/>
</f:facet>
<h:outputText value="#{item.itemCode}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Customer Name"/>
</f:facet>
<h:outputText value="#{item.itemDescription}"/>
</p:column>
</p:dataTable>
<h:commandButton id="save" value="Save"
action="#{orderController.createOrder}" />
<h:messages />
</h:form>
這是我的烤豆
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import org.springframework.stereotype.Component;
import com.kpowd.model.Item;
import com.kpowd.model.Order;
import com.kpowd.model.OrderItem;
import com.kpowd.service.ItemService;
import com.kpowd.service.OrderService;
import com.kpowd.service.UserService;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
@Component
@ManagedBean
@ViewScoped
public class OrderController implements Serializable{
@ManagedProperty(value = "#{orderService}")
public OrderService orderService;
@ManagedProperty(value = "#{itemService}")
public ItemService itemService;
public Item item;
public List<Item> allItems;
// public List<Item> acFilterdItem;
public int quantity;
public List<Item> orderdItems;
@PostConstruct
public void Init(){
allItems = itemService.getAllItems();
System.out.println("item array size : "+allItems.size());
orderdItems = new ArrayList<Item>();
}
public List<Item> completeItem(String query) {
List<Item> acFilterdItem = new ArrayList<Item>();
for (int i = 0; i < allItems.size(); i++) {
if(allItems.get(i).getItemCode().toLowerCase().startsWith(query)){
acFilterdItem.add(allItems.get(i));
}
}
return acFilterdItem;
}
public void addItemsToDataTable(Item item){
// this is the object that gets null each time
System.out.println("inside addItemsToDataTable");
System.out.println("Print : "+item.toString());
// System.out.println("Item : "+item.getItemCode()+ " : " +item.getItemDescription());
orderdItems.add(item);
// return "";
}
}
請幫我.....
我認為這是因為commandButton屬性:
actionListener="#{orderController.addItemsToDataTable(item)}"
不知道您要嘗試傳遞的item
參數。 雖然class屬性item
應該具有getter / setter,所以只需將方法簽名切換到此方法即可:
actionListener="#{orderController.addItemsToDataTable(orderController.item)}"
甚至可以省略它,並保持如下所示:
actionListener="#{orderController.addItemsToDataTable}"
在managedBean中加上: public void addItemsToDataTable( ){ ... }
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.