2015-04-16 98 views
-1

env是PrimeFaces + Glassfish + Hibernate。PrimeFaces命令按鈕在重定向之前未調用actionListener

「創建」命令按鈕將重定向到PurchaseOrder表單頁面,託管bean是會話作用域,PurchaseOrder與Product具有一對一關係。自動完成將選擇一個產品來填充bean。

我的設計是,它會在重定向之前創建一個新對象。

有兩個問題,第一個,按鈕沒有調用actionListener,第二個是Product對象爲null,但實際上它是在PostConstruct事件中創建的。

<p:commandButton id="createButton" actionListener="purchaseOrderController.prepareCreate" value="#{bundle.Create}" action="Form.xhtml?faces-redirect=true" /> 

Managed Bean的

@Named("purchaseOrderController") 
@SessionScoped 
public class PurchaseOrderController implements Serializable { 
    private PurchaseOrder selected; 
    @PostConstruct 
    public void init() { 
     selected = new PurchaseOrder(); 
     selected.setProduct(new Product());  
    } 

    public PurchaseOrder prepareCreate() { 
     System.out.println("prepareCreate"); //didn't get invoked 
     selected = new PurchaseOrder(); 
     return selected; 
    } 
    //.... 
} 

產品自動完成

<p:autoComplete id="Product" value="#{purchaseOrderController.selected.product}" 
                completeMethod="#{productController.completeProduct}" 
                var="product" itemLabel="${product.name}" 
                itemValue="#{product}" converter="productConverter" forceSelection="true" >          
             <p:ajax event="itemSelect" update=":PurchaseOrderForm" /> 
            </p:autoComplete> 

錯誤信息

Caused by: javax.el.PropertyNotFoundException: /purchaseOrder/Form.xhtml @49,128 value="#{purchaseOrderController.selected.product}": Target Unreachable, 'null' returned null 
    at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:133) 
    at javax.faces.component.UIInput.updateModel(UIInput.java:832) 
    ... 51 more 
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, 'null' returned null 
    at com.sun.el.parser.AstValue.getTarget(AstValue.java:192) 
    at com.sun.el.parser.AstValue.setValue(AstValue.java:226) 
    at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:294) 
    at org.jboss.weld.el.WeldValueExpression.setValue(WeldValueExpression.java:64) 
    at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131) 
    ... 52 more 
+0

更多信息又見http://stackoverflow.com/questions/3909267/differences-between-action-and-actionlistener – Kukeltje

+1

你應該已經知道了,你應該問每個問題有一個問題。請分割。這樣他們可以適當地關閉爲重複。 – BalusC

+0

我甚至沒有讀到'兩個問題'部分。 – Kukeltje

回答

0

這不是一個重複的問題。實際上我忘記了在actionListener中使用EL表達式。

actionListener="purchaseOrderController.prepareCreate" 

應該

actionListener="#{purchaseOrderController.prepareCreate}"