-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
更多信息又見http://stackoverflow.com/questions/3909267/differences-between-action-and-actionlistener – Kukeltje
你應該已經知道了,你應該問每個問題有一個問題。請分割。這樣他們可以適當地關閉爲重複。 – BalusC
我甚至沒有讀到'兩個問題'部分。 – Kukeltje