将元素从datatable(jsf)加载到集合

时间:2018-07-14 16:32:18

标签: java jsf

我在jsf页面上有一个数据表,其中的下一列是:产品名称,价格和产品金额输入字段。通过单击按钮,我应该将元素从数据表加载到产品量大于0(方法addCups)的集合中。 如何创建呢? 谢谢。

托管豆

@ManagedBean
@SessionScoped
public class OrderBean extends SpringBeanAutowiringSupport {
@Autowired
private OrderDAO orderDAO;

@Autowired
private OrderPositionDAO orderPositionDAO;


private Map<Long, Integer> selectedItems = new HashMap<>();

private Integer quantityOfCups;

public Map<Long, Integer> getSelectedItems() {
    return selectedItems;
}

public void setSelectedItems(Map<Long, Integer> selectedItems) {
    this.selectedItems = selectedItems;
}

public Integer getQuantityOfCups() {
    return quantityOfCups;
}

public void setQuantityOfCups(Integer quantityOfCups) {
    this.quantityOfCups = quantityOfCups;
}


public void addCups(Long id, Integer numOfCups){
    if(numOfCups > 0){
        selectedItems.put(id, numOfCups);
    }
    if(numOfCups == 0){
        selectedItems.remove(id);
    }
    System.out.println(selectedItems);
}

JSF页面

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">

<h:form>
<p:dataTable value="#{coffeeBean.allCoffee}" var="coffee">
    <p:column>
        <h:outputText value="#{coffee.coffeeName}"/>
    </p:column>
    <p:column>
        <h:outputText value="#{coffee.costForCup}"/>
    </p:column>
    <p:column>
        <p:inputText value="#{orderBean.quantityOfCups}"/>
    </p:column>
</p:dataTable>
    <h:commandButton value="add cups" action="#{orderBean.addCups(coffee.id, orderBean.quantityOfCups)}"/>
</h:form>

1 个答案:

答案 0 :(得分:0)

有多种方法可以实现此目的,但是只需对发布的代码进行最少的修改,就可以通过以下方式实现它:

  • 使用您的咖啡ID添加一个隐藏的数据表列,并定义数据表的bst = xgb.Booster({'nthread':4}) #init model bst.load_model("model.bin") # load data 属性,
  • 使用JavaScript方法迭代数据表值并获取咖啡ID数量对,
  • 使用widgetVar将咖啡杯数组作为JSON字符串发送到支持bean
  • 内部bean方法解析传递的JSON字符串,并向您的订单添加咖啡杯或从中删除咖啡杯

您的xhtml页面p:remoteCommand如下

h:form

添加了Java脚本

<h:form>
    <p:dataTable widgetVar="dataTableWidget" value="#{coffeeBean.allCoffee}" var="cofee">
        <p:column style="display:none">
            <h:outputText value="#{coffee.id}"/>
        </p:column>
        <p:column headerText="name">
            <h:outputText value="#{coffee.coffeeName}"/>
        </p:column>
        <p:column headerText="price">
            <h:outputText value="#{coffee.costForCup}"/>
        </p:column>
        <p:column headerText="quantity">
            <p:inputText/>
        </p:column>
    </p:dataTable>

    <p:commandButton value="Add cups" type="button" onclick="collectOrderFromTable()"/>
    <p:remoteCommand name="sendToOrderBean" actionListener="#{orderBean.addCups}"/>
</h:form>

您的 <script> //<![CDATA[ function collectOrderFromTable() { var coffeeCups = []; //get table rows var tableRows = PF('dataTableWidget').tbody[0].childNodes; //loop through rows for (i = 0; i < tableRows.length; i++) { //get cells of current row var cells = tableRows[i].cells; //get value of hidden ID column var id = cells[0].innerText; //get quantity from input field var quantity = cells[3].firstChild.value; //add new item to array coffeeCups.push({id: id, quantity: quantity}); } console.log("Coffee cups", JSON.stringify(coffeeCups)); sendToOrderBean([{name: 'coffeeCups', value: JSON.stringify(coffeeCups)}]); } //]]> </script> 中的方法addCups如下:

OrderBean

其中import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; //... //... public void addCups() { //get string passed from xhtml page String values = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("coffeCups"); //parse JSON string to List List<CoffeeQuantity> coffeCups = (ArrayList<CoffeeQuantity>) new Gson().fromJson(values, new TypeToken<ArrayList<CoffeeQuantity>>() {}.getType()); for (CoffeeQuantity cq : coffeCups) { System.out.println("Coffee id: " + cq.getId() + ", Quantity:" + cq.getQuantity()); if (cq.getQuantity()>0){ selectedItems.put(cq.getId(), cq.getQuantity()); }else{ selectedItems.remove(cq.getId()); } } } 是帮助类,可简化JSON字符串解析

CoffeeQuantity