简体   繁体   English

如何将素面自动完成对象放入后备bean

[英]how to get the prime face auto complete object in to backing bean

i need to send the the primeface auto-complete object in to backing bean while user clicks on "Add" button. 我需要在用户单击“添加”按钮时将质数自动完成对象发送到支持Bean中。 in this case the primeface auto complete function works properly. 在这种情况下,primeface自动完成功能会正常工作。 but while sending the selected object in to backing bean it always gives me a null pointer 但是在将所选对象发送到支持Bean时,它总是给我一个空指针

this is my page 这是我的页面

<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>

and this is my baking bean 这是我的烤豆

    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 "";
        }

    }

please help me..... 请帮我.....

I think it's due because the commandButton attribute : 我认为这是因为commandButton属性:

actionListener="#{orderController.addItemsToDataTable(item)}"

does not know the item parameter you're trying to pass with. 不知道您要尝试传递的item参数。 While the class attribute item is supposed having getter/setter, so just switch that method signature to this one : 虽然class属性item应该具有getter / setter,所以只需将方法签名切换到此方法即可:

actionListener="#{orderController.addItemsToDataTable(orderController.item)}"

Or even, you can omit it, and keep it like : 甚至可以省略它,并保持如下所示:

actionListener="#{orderController.addItemsToDataTable}"

plus in the managedBean: public void addItemsToDataTable( ){ ... } . 在managedBean中加上: public void addItemsToDataTable( ){ ... }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM