2016-02-23 40 views
0

我正在使用JSF傳遞元素,並且我想向我的Bean發送一個完整的對象,但是當我做到這一點時我得到空值。JSF傳遞元素無法發送對象

我在做這樣的事情:

<f:metadata> 
<f:viewParam id="id" name="id" value="#{productDetailBean.id}"/> 
<f:viewAction action="#{productDetailBean.loadBook()}"/>    

<form jsf:id="form" method="post" class="container"> 
      <ul id="variants" class="clearfix"> 
       <li class="buy-option"><input type="radio" name="id" 
        class="variant-radio" 
        id="product-variant-#{productDetailBean.book.id}" 
        value="#{productDetailBean.book.id}" checked="checked" /> 
        <label class="variant-label" 
        for="product-variant-#{productDetailBean.book.id}"> E-book 
         + Impresso </label> 
        <small class="compare-at-price">R$ #{productDetailBean.book.price}</small> 
        <p class="variant-price">R$ #{productDetailBean.book.price}</p> 
       </li> 
      </ul> 

      <button type="submit" jsf:action="#{shoppingCartBean.add(productDetailBean.id)}" class="submit-image icon-basket-alt" 
       title="#{productDetailBean.book.title}">Comprar</button> 

我的豆:

public String add(Integer id){ 
    Book book = bookDao.search(id); 
    ShoppingItem shoppingItem = new ShoppingItem(book); 
    shoppingCart.add(shoppingItem); 
    return "/site/carrinho?faces-redirect=true"; 
} 

我想做到以下幾點:

<button type="submit" jsf:action="#{shoppingCartBean.add(productDetailBean.book)}" class="submit-image icon-basket-alt" 
       title="#{productDetailBean.book.title}">Comprar</button> 

和bean:

public String add(Book book){ 
    ShoppingItem shoppingItem = new ShoppingItem(book); 
    shoppingCart.add(shoppingItem); 
    return "/site/carrinho?faces-redirect=true"; 
} 

但是,當我這樣做,我得到一個空的書,是有可能做到的呢?

+0

只要仔細檢查一下,你是說第一個代碼版本可以正常工作,你指定'#{shoppingCartBean.add(productDetailBean.id)}'?你在提交方法中得到一個整數? – DavidS

+0

@DavidS是的,它的工作原理,但我想讓第二個版本工作 – prabello

+0

您的問題意味着它在您使用普通的JSF組件時有效。這是真的?否則請刪除這個含義。至於技術問題,我猜你的bean的範圍很大。這個構造需要一個視圖範圍的bean。 – BalusC

回答

0

代碼工作因爲<f:viewParam id="id" name="id" value="#{productDetailBean.id}"

不像書,ID正在對JSF組件樹設定,所以當你執行ID填寫的代碼,但是這本書是不是。

+0

ID不保留在JSF組件樹中,所以這個「答案」是真正令人困惑的。 – BalusC

+0

f:viewParam的值不在樹上嗎?我是 – prabello

+0

只有在驗證/轉換失敗的情況下,但操作方法不會首先被擊中。 – BalusC