在重定向[重复]之前,PrimeFaces命令按钮未调用actionListener
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在重定向[重复]之前,PrimeFaces命令按钮未调用actionListener相关的知识,希望对你有一定的参考价值。
env是PrimeFaces + Glassfish + Hibernate。
“创建”命令按钮将重定向到PurchaseOrder表单页面,托管bean是会话范围的,PurchaseOrder与Product具有一对一的关系。自动完成将选择一个Product来填充bean。
我的设计是,它会在重定向之前创建一个新对象。
有两个问题,第一个,按钮没有调用actionListener,第二个是Product对象是null,但实际上它是在PostConstruct事件中创建的。
<p:commandButton id="createButton" actionListener="purchaseOrderController.prepareCreate" value="#{bundle.Create}" action="Form.xhtml?faces-redirect=true" />
管理豆
@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
答案
这不是一个重复的问题。实际上我忘了在actionListener中使用EL表达式。
actionListener="purchaseOrderController.prepareCreate"
应该
actionListener="#{purchaseOrderController.prepareCreate}"
以上是关于在重定向[重复]之前,PrimeFaces命令按钮未调用actionListener的主要内容,如果未能解决你的问题,请参考以下文章