Метод перетаскивания на метод p: dataTable не вызывается - PullRequest
0 голосов
/ 03 мая 2018

Я скачал PrimeFaces showcase-6.2.war и развернул его на JBoss WildFly 12.0.0. Финальный запуск в EE 8. Пример перетаскивания «DataTable» работает отлично.

Для теста / PoC я воспроизвел пример витрины (точно), просто используя некоторые из моих собственных данных. Который заполняет и отображает в DataTable.

Однако, когда я перетаскиваю элемент в «Выбранную панель», я получаю ошибку:

SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (по умолчанию задача-1) javax.el.MethodNotFoundException: метод не найден: класс com.notifywell.controller.NOTiFYwellController.onIngredientDrop (org.primefaces.event.DragDropEvent)

XHTML, который вызывает это:

<p:droppable for="fieldsetSelectedIngredients" tolerance="touch" activeStyleClass="ui-state-highlight" datasource="dataTableAvailableIngredients" onDrop="handleDrop">
    <p:ajax listener="#{nOTiFYwellController.onIngredientDrop}" update="dropArea dataTableAvailableIngredients" />
</p:droppable>

PrimeFace ShowCase:

<p:ajax listener="#{dndCarsView.onCarDrop}" update="dropArea availableCars" />

Мой Java 'backing bean' с методом '' onIngredientDrop ":

@Model
@Path("/")
@ViewScoped // OmniFaces 3.1
@Named("nOTiFYwellController")
//@ManagedBean(name="nOTiFYwellController") // Deprecated
public class NOTiFYwellController implements Serializable {
     .....

    public void onIngredientDrop(DragDropEvent ddEvent) {
        Ingredient ingredient = ((Ingredient) ddEvent.getData());

        logger.info("***** onIngredientDrop ddEvent = {}", ddEvent.getData());
    }
}

PrimeFace ShowCase:

public void onCarDrop(DragDropEvent ddEvent) {
        Car car = ((Car) ddEvent.getData());

        droppedCars.add(car);
        cars.remove(car);
}

Ошибка связана с тем, что p:ajax listener не передает параметр DragDropEvent.

В примере PF ShowCase параметр не требуется. Как я могу получить DragDropEvent в своем бэке?

Если я создаю метод onIngredientDrop без параметров, он вызывается и отображает (исправленное) сообщение журнала.

Мое окружение:

PrimeFace 6.2.3 JSF 2.3 JBoss WildFly 12.0.0.FINAL Java версия 1.8.0_66 (сборка 1.8.0_66-b17) Google Chrome Версия 66.0.3359.117 (официальная сборка) (64-разрядная версия) macOS High Sierra 10.13.4

ТИА

1 Ответ

0 голосов
/ 04 мая 2018

Ваш код содержит противоречие: @Model = @Named + @ RequestScoped и дополнительный @Named принимает имя класса по умолчанию. Поэтому, пожалуйста, сделайте до вашего ума .... И @Path на боб, который используется из JSF также редкость. Может быть, вам нужно добавить больше кода в класс обслуживания и вызвать этот класс либо из аннотированного класса @ Path + @ Model, а также из @Named и @ViewScoped. В то же время это было бы странно, что вы хотите использовать из двух разных бобов - Kukeltje

Решено предложением @Kukeltje .

Да, ошибка заключалась в том, что в моем контроллере @Model аннотации для вспомогательного компонента JSF смешивались.

Я переместил метод onIngredientDrop в «выделенный» компонент поддержки JSF и включил его в WAR для развертывания.

// @ManagedBean(name = "ingredientBean") // Deprecated
@Named
@ViewScoped
public class IngredientBean implements Serializable {

    /**
     *
     */
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     *
     */
    private List<Ingredient> droppedIngredients = new ArrayList<Ingredient>();

    /**
     * @param ddEvent DragDropEvent
     */
    public void onIngredientDrop(DragDropEvent ddEvent) {
        Ingredient ingredient = ((Ingredient) ddEvent.getData());

        logger.info("***** onIngredientDrop ingredient = {}", ingredient.toString());

        //droppedIngredients.add(Ingredient);
    }
}

Вывод консоли WildFly:

12: 10: 04,021 INFO [com.notifywell.jsf.IngredientBean] (по умолчанию задача-3) ***** onIngredientDrop ингредиент = Ingredient {id = '5aec3dc5c0a118606e42a11b', componentName = 'Фолиевая кислота'}

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