Почему добавление программно отображаемой панели нарушает поведение ajax для объявленной Panel? - PullRequest
2 голосов
/ 14 марта 2012

У меня есть следующий код внешнего интерфейса с использованием простых лиц

    <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 Это, похоже, решило проблему для некоторых ... не для меня. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...