入力テキストとコマンド ボタンを使用して動的フォームを作成しようとしています。すべて正常に動作します。しかし、コマンド ボタンをクリックすると、アクション リスナーが呼び出されません。私が間違っていること、またはこれが PF または Mojarra のバグであるかどうかを提案してください。コードは以下です
panel = new Panel();
panel.setHeader("Test");
InputText text = new InputText();
final String binding = "#{roleCreateForm.role.name}";
text.setValueExpression("value",
createValueExpression(binding, String.class));
panel.getChildren().add(text);
CommandButton button = new CommandButton();
button.setValue("Save");
MethodExpression me = createMethodExpression("#{roleCreateForm.save}");
button.addActionListener(new MethodExpressionActionListener(me));
panel.getChildren().add(button);
また、createXXXExpression は以下のとおりです。
private MethodExpression createMethodExpression(String action) {
final Class<?>[] paramTypes = new Class<?>[0];
MethodExpression methodExpression = getExpressionFactory()
.createMethodExpression(getELContext(),action, null, paramTypes);
return methodExpression;
}
private ValueExpression createValueExpression(String binding,
Class<String> clazz) {
final ValueExpression ve = getExpressionFactory()
.createValueExpression(getELContext(), binding, String.class);
return ve;
}
public static ELContext getELContext() {
return FacesContext.getCurrentInstance().getELContext();
}
public static ExpressionFactory getExpressionFactory() {
return getApplication().getExpressionFactory();
}
public static Application getApplication() {
return FacesContext.getCurrentInstance().getApplication();
}
私のフォームビーンは以下です
public void save() {
logger.info("Saving role - {}" , role);
}
Primefaces 3.2、Mojarra 2.1.7、Tomcat 7、JDK 6、Ubuntu 11 を使用しています
これが私の変更されたコードです はい、これはよくある間違いとして指摘されているようです。しかし、ここに私の変更されたコードがあります。これもうまくいきません。
public Panel getPanel() {
if (panel == null) {
panel = new Panel();
panel.setHeader("Test");
panel.setId("dynapanel");
InputText text = new InputText();
text.setId("dynatext");
final String binding = "#{roleCreateForm.role.name}";
text.setValueExpression("value", createValueExpression(binding, String.class));
panel.getChildren().add(text);
CommandButton button = new CommandButton();
button.setValue("Save");
MethodExpression me = getExpressionFactory().createMethodExpression(getELContext(), "#{roleCreateForm.save}", void.class, new Class[0]);
AjaxBehavior ajaxBehavior = new AjaxBehavior();
//ajaxBehavior.setListener( me );
ajaxBehavior.addAjaxBehaviorListener( new AjaxBehaviorListenerImpl( me ) );
button.addClientBehavior( "submit", ajaxBehavior);
panel.getChildren().add(button);
}
return panel;
}