簡體   English   中英

如何將素面自動完成對象放入后備bean

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM