2013-09-27 4 views
5

Использование primeFaces У меня есть следующие кнопки:JSF CommandButton не работает, когда создается динамически с ява

<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 не работает.

1 примечание. Кнопка, созданная inline с использованием правлений, находится на загрузке страницы. Кнопка, которую пытались добавить с помощью java, не выполняется до тех пор, пока не будет выполнен вызов Ajax для создания кнопки формы AND.

Любая помощь была бы полезной.

Спасибо.

ответ

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); 

Исключение null указателя не было связано. Похоже, просто добавление идентификатора и удаление ActionListener сделали трюк. Весьма признателен!

Смежные вопросы