-1

フォームがそのように動作する理由がわかりません。

これは私のJSFページです:

<h:body>
  <h:form>
    <h:form>
      <h:selectOneMenu value="#{productBean.product}" converter="#{productConverter}" validator="com.jsf.ProductAvailableValidator">
        <f:selectItems value="#{productBean.pizza}" var="pizza" itemValue="#{pizza}" itemLabel="#{pizza.name}" />
        <h:commandButton value="Dodaj" action="#{productBean.addToOrder(productBean.product.name)}" /></h:selectOneMenu>
    </h:form>
    <h:form>
      <h:selectOneMenu value="#{productBean.product}" converter="#{productConverter}" validator="com.jsf.ProductAvailableValidator">
        <f:selectItems value="#{productBean.drink}" var="drink" itemValue="#{drink}" itemLabel="#{drink.name}" />
        <h:commandButton value="Dodaj" action="#{productBean.addToOrder(productBean.product.name)}" /></h:selectOneMenu>
    </h:form>
    <h:form>
      <h:selectOneMenu value="#{productBean.product}" converter="#{productConverter}" validator="com.jsf.ProductAvailableValidator">
        <f:selectItems value="#{productBean.other}" var="other" itemValue="#{other}" itemLabel="#{other.name}" />
        <h:commandButton value="Dodaj" action="#{productBean.addToOrder(productBean.product.name)}" /></h:selectOneMenu>
    </h:form>
    <messages />
    <h:outputText value="#{productBean.order}" />
    <h:commandButton value="Wyczyść" action="#{ProductBean.clearOrder()}" /></h:form>
</h:body>

そして、これは私の ProductBean です:

@ManagedBean
@SessionScoped
public class ProductBean extends Connector
{

    private List<Product> products;
    private List<Product> pizza;
    private List<Product> drink;
    private List<Product> other;
    boolean first = true;
    private StringBuilder order = new StringBuilder();

    public String getOrder() {
        return order.toString();
    }
    private Product product;

    public Product getProduct() {
        return product;
    }
    public void setProduct(Product product) {
        this.product = product;
    }
    public void addToOrder(String prod)
    {
        System.out.println("dodaje");
        if(first)
        {
            first = false;
            this.order.append(prod);  
        }
        else
            this.order.append(" + ").append(prod);
    }
    public void clearOrder()
    {
        this.order = null;
        first = true;
    }
    public void setProducts(List<Product> products) {
        this.products = products;
    }
    public ProductBean() throws SQLException
    {
        resultSet = statement.executeQuery("SELECT * FROM dbo.products");
        products = new ArrayList<Product>();
        while(resultSet.next())
        {
            product = new Product();
            product.setId_product(resultSet.getInt("id_product"));
            product.setName(resultSet.getString("name"));
            product.setCategory(resultSet.getInt("category_id"));
            product.setIs_available(resultSet.getInt("is_available"));
            products.add(product);
        }
    }
    public Product getProductById(int id)
    {
        Iterator<Product> it = products.iterator();
        while(it.hasNext()) 
        {
            Product prod = it.next();
            if(prod.getId_product() == id)
                return prod;
        }
        return null;
    }

    public List<Product> getPizza() throws SQLException
    {   
        Iterator<Product> it = products.iterator();
        pizza = new ArrayList<Product>();
        while(it.hasNext()) 
        {
            Product prod = it.next();
            if(prod.getCategory() == 1)
                pizza.add(prod);
        }
        return pizza;
    }
    public List<Product> getDrink() throws SQLException
    {   
        Iterator<Product> it = products.iterator();
        drink = new ArrayList<Product>();
        while(it.hasNext()) 
        {
            Product prod = it.next();
            if(prod.getCategory() == 2)
                drink.add(prod);
        }
        return drink;
    }
    public List<Product> getOther() throws SQLException
    {   
        Iterator<Product> it = products.iterator();
        other = new ArrayList<Product>();
        while(it.hasNext()) 
        {
            Product prod = it.next();
            if(prod.getCategory() == 3)
                other.add(prod);
        }
        return other;
    }
    public List<Product> getProducts() {
        return products;
    }

}

また、コードをより簡単かつ迅速に分析できるようにするために、ここにスクリーンショットを送信します。 ここに画像の説明を入力

ここで何が起こるかというと、最初のボタン「Dodaj」(「追加」を意味する) のみが機能し、outputlabel に文字列が正しく追加されます。残りは何もしません。順序を変更すると、最初のものだけが機能します。なんで?

4

1 に答える 1

1

複数のネスト/カスケードされ<h:form>た があり、HTML では許可されていません! 1 つ作成<h:form>してすべての要素をそのフォームに配置するか、複数<h:form>の を作成しますが、それらをネスト/カスケードしないでください。

于 2013-05-15T16:05:43.713 に答える