Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 捕捉基本面';重复结构内的s微调器值_Jsf_Primefaces_Spinner - Fatal编程技术网

Jsf 捕捉基本面';重复结构内的s微调器值

Jsf 捕捉基本面';重复结构内的s微调器值,jsf,primefaces,spinner,Jsf,Primefaces,Spinner,我正在使用Primefaces和微调器组件。我的问题是,如果spinner值位于迭代结构中,它就不会在bean中设置。我的微调器在ui中:重复。 最后,问题是如何处理映射到bean中相同属性的不同表单控件 <h:form> <ui:repeat var="item" value="#{myBean.items}"> <p:spinner size="2" min="1" max="50" style="width:75px" value

我正在使用Primefaces和微调器组件。我的问题是,如果spinner值位于迭代结构中,它就不会在bean中设置。我的微调器在ui中:重复。 最后,问题是如何处理映射到bean中相同属性的不同表单控件

<h:form>
    <ui:repeat var="item" value="#{myBean.items}">   
        <p:spinner size="2" min="1" max="50" style="width:75px" value="#{cartBean.quantityToOrder}"/>
        <p:commandButton value="Add to cart" action="#{cartBean.saveItemToCart(item)}" ajax="false"/>
    </ui:repeat>
</h:form>    
我怀疑这与表单提交有关,我尝试了一个包含集合中所有元素的表单,以及一个包含任何微调器+按钮的表单。生成的客户端ID对于所有微调器都是不同的


任何帮助都将不胜感激。

在您的
setQuantityToOrder(int quantityToOrder)
方法上放置一个
System.out.println(“数量:+quantityToOrder”)
,并将看到问题。最后一个微调器的值将优先于其他微调器,因为所有微调器都指向相同的属性(cartBean.quantityToOrder)

尝试将quantityToOrder移动到项目,如下所示:

<h:form id="mainForm">
    <ui:repeat value="#{cartBean.items}" var="item">
        <p:outputLabel value="#{item.name}: " for="sp" />
        <p:spinner id="sp" size="2" min="1" max="50" style="width:75px" value="#{item.quantityToOrder}" />
        <p:commandButton value="Add to cart" action="#{cartBean.saveItemToOrder(item)}" process="@this, sp" update=":mainForm:total" />
        <br />
    </ui:repeat>
    Total: <h:outputText id="total" value="#{cartBean.quantityToOrder}" />
</h:form>

谢谢你,丹尼尔。你的解决方案有效。真正的诀窍是从commandButton中删除ajax=“false”。
<h:form id="mainForm">
    <ui:repeat value="#{cartBean.items}" var="item">
        <p:outputLabel value="#{item.name}: " for="sp" />
        <p:spinner id="sp" size="2" min="1" max="50" style="width:75px" value="#{item.quantityToOrder}" />
        <p:commandButton value="Add to cart" action="#{cartBean.saveItemToOrder(item)}" process="@this, sp" update=":mainForm:total" />
        <br />
    </ui:repeat>
    Total: <h:outputText id="total" value="#{cartBean.quantityToOrder}" />
</h:form>
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class CartBean implements Serializable {

    private List<CartItem> items;

    private int quantityToOrder;

    @PostConstruct
    public void setup() {
        items = new ArrayList<CartItem>();
        items.add(new CartItem(1, "A"));
        items.add(new CartItem(2, "B"));
        items.add(new CartItem(3, "C"));
    }

    public void saveItemToOrder(CartItem item) {
        //do whatever you want to do with the item quantity.
        System.out.println("Qtd of " + item.getName() + ": " + item.getQuantityToOrder());

        //to calculte the qtd of items on the cart.
        quantityToOrder = 0;
        for (CartItem cartItem : items) {
            quantityToOrder += cartItem.getQuantityToOrder();
        }
    }

    public List<CartItem> getItems() {
        return items;
    }

    public void setItems(List<CartItem> items) {
        this.items = items;
    }

    public int getQuantityToOrder() {
        return quantityToOrder;
    }

    public void setQuantityToOrder(int quantityToOrder) {
        this.quantityToOrder = quantityToOrder;
    }

}
import java.io.Serializable;

public class CartItem implements Serializable {

    private Integer id;

    private Integer quantityToOrder;

    private String name;

    public CartItem(Integer id, String name) {
        this.id = id;
        this.name = name;
        quantityToOrder = 0;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getQuantityToOrder() {
        return quantityToOrder;
    }

    public void setQuantityToOrder(Integer quantityToOrder) {
        this.quantityToOrder = quantityToOrder;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 67 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final CartItem other = (CartItem) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

}