gpt4 book ai didi

java - 如何将主面自动完成对象放入支持 bean 中

转载 作者:行者123 更新时间:2023-12-01 12:47:57 25 4
gpt4 key购买 nike

当用户单击“添加”按钮时,我需要将 primeface 自动完成对象发送到支持 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>

这是我的烘焙 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 "";
}

}

请帮帮我......

最佳答案

我认为这是因为 commandButton 属性:

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

不知道您尝试传递的item参数。虽然类属性 item 应该具有 getter/setter,所以只需将该方法签名切换到此方法签名即可:

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

或者甚至,您可以省略它,并保持它:

actionListener="#{orderController.addItemsToDataTable}"

在 ManagedBean 中加上:public void addItemsToDataTable( ){ ... }

关于java - 如何将主面自动完成对象放入支持 bean 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24506234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com