使用java动态创建时,JSF commandButton无法正常工作

时间:2013-09-27 20:23:39

标签: jsf primefaces

使用primeFaces我有以下按钮:

<p:commandButton value="Submit" action="#{createDeal.saveDeal}" update="myPanel" />

这很好用。但是我想使用java生成该按钮。 我有以下代码:

CommandButton submit = new CommandButton();
submit.setValue("Submit");
submit.setUpdate("myPanel");
FacesContext facesCtx = FacesContext.getCurrentInstance();
Application app = facesCtx.getApplication();
ExpressionFactory elFactory = app.getExpressionFactory();
ELContext elContext = facesCtx.getELContext();
MethodExpression methodExpression =null;
methodExpression = elFactory.createMethodExpression(elContext,"#{createDeal.saveDeal}",String.class, new Class[]{});
submit.addActionListener(new MethodExpressionActionListener(methodExpression));
submit.setActionExpression(methodExpression);
createButtons.getChildren().add(submit);

当我单击提交时,我的表单验证(使用输入上的setRequired函数完成),但表单永远不会到达我的createDeal类。内联按钮工作原理我做错了什么,但java生成的按钮没有。

一个注意事项。使用primefaces内联创建的按钮是在页面加载时。尝试添加java的按钮直到进行Ajax调用以生成表单AND按钮后才会完成。

任何帮助都会有所帮助。

感谢。

1 个答案:

答案 0 :(得分:2)

感谢BalusC的所有帮助。我仍然不确定我是如何错过这个的!以下作品:

CommandButton submit = new CommandButton();
submit.setValue("Submit");
submit.setUpdate("myPanel");
submit.setId("create"+panelClass);
FacesContext facesCtx = FacesContext.getCurrentInstance();
ELContext elContext = facesCtx.getELContext();
Application app = facesCtx.getApplication();
ExpressionFactory elFactory = app.getExpressionFactory();
MethodExpression methodExpression =null;
methodExpression = elFactory.createMethodExpression(elContext,"#    {createDeal.saveDeal}",null, new Class[]{});
submit.setActionExpression(methodExpression);
createButtons.getChildren().add(submit);

空指针异常无关。看起来简单地添加ID并删除ActionListener就可以了。非常感谢!