У меня есть следующий код внешнего интерфейса с использованием простых лиц
<p:panel binding="#{widgetBean.panel}"/>
<p:panel header="Widget 2" id="declaredPanel" style="height:300px; width:300px">
<p:droppable tolerance="touch" scope="widgetDrop" activeStyleClass="ui-state-highlight" >
<p:ajax listener="#{widgetBean.widgetDropped}" ></p:ajax>
</p:droppable>
</p:panel>
с этим для внутреннего компонента:
public Panel getPanel(){
Panel p = new Panel();
p.setHeader("test");
p.setId("programmaticPanel");
p.setStyle("height:300px; width:300px");
Droppable d = new Droppable();
d.setDatasource("availableWidgets");
d.setTolerance("touch");
d.setScope("widgetDrop");
d.setActiveStyleClass("ui-state-highlight");
FacesContext fc = FacesContext.getCurrentInstance();
ExpressionFactory ef = fc.getApplication().getExpressionFactory();
MethodExpression onDropExpr = ef.createMethodExpression(
fc.getELContext(), "#{widgetBean.widgetDropped}", null, new Class[] { DragDropEvent.class });
AjaxBehavior ajaxBehavior = new AjaxBehavior();
ajaxBehavior.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(onDropExpr));
d.addClientBehavior("drop", ajaxBehavior);
p.getChildren().add(d);
return p;
}
public void widgetDropped(DragDropEvent ddEvent) {
System.out.println("DROP EXECUTED ON SERVER");
}
Самое странное случается. Если я использую оба способа рендеринга Panel в пользовательском интерфейсе, мой слушатель ajax никогда не будет вызван. Если я удаляю Panel, которая использует привязку, мой слушатель отбрасывания выполняется. Кроме того, я могу вернуть просто панель jane без дочерних элементов, и декларативная панель по-прежнему не будет запускать слушателя. Однако обратное неверно. Если я удаляю декларативную панель, программно связанная, она все равно никогда не запускает слушателя. На самом деле у меня есть две проблемы:
1.) рендеринг программной панели прерывает событие прослушивания отбрасывания на декларативной панели
2.) В любом случае слушатель отбрасывания никогда не вызывается для программной панели.
Я использую Primefaces 3.2 и работаю на Glassfish 3.1.1 Я ЛЮБЛЮ любую помощь на этом этапе. Я исследовал эту проблему и обнаружил, что другие жалуются на проблемы, связывающие ajaxbehaviors программно, в частности: Linky link Это, похоже, решило проблему для некоторых ... не для меня. Спасибо!