JSF2 и пользовательские компоненты - как вызвать действие из кода Javascript? - PullRequest
1 голос
/ 28 декабря 2011

Я адаптировал объект JS круговой диаграммы для использования с JSF; для этого я создал пользовательский компонент, который выводит на страницу соответствующую разметку и вызовы JS, корректно отображая график. Для справки: это ссылка для учебника, по которому я следовал для части JS.

Следующим шагом будет прослушивание щелчков на срезах и вызов действия из поддерживающего компонента. Объект JS для диаграммы уже содержит функцию-заполнитель, которая прослушивает такие щелчки, поэтому я считаю, что часть JS хороша. Тем не менее, сторона JSF до сих пор меня беспокоит; Я прочитал учебник по Java EE, сообщения в блоге Джима Дрисколла и по всему Интернету, и до сих пор не могу разобраться с этим.

Итак, кто-либо может быть настолько любезен, чтобы привести небольшой пример того, как я мог связать вызов функции JS с прослушивателем событий в JSF, чтобы мой компонент поддержки был хорошо информирован о том, какой индекс слайса был нажат пользователь?

Это было бы что-то близкое к:

function myChartObject() {

    function onSliceClick() {
        // This will somehow trigger JSF ajax event listener with slice data
    }
}

class MyCustomChart extends UIComponentBase implements ClientBehaviorHolder {
    // Is the decode() method the place to bind JS calls to JSF actions?
}

Ближе всего к моей проблеме я нашел что-то вроде this . Тем не менее, я хотел бы иметь эту поддержку в своем собственном компоненте, используя стандартный API JSF. Что-то, возможно, близко к этому ?

Спасибо всем заранее!

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Javascript API JSF для выполнения вызовов AJAX сам по себе стандартизирован (библиотека ресурсов "javax.faces", имя ресурса "jsf.js"), но добавить полную поддержку AJAX в собственный пользовательский компонент на основе Java немного сложно.

Самый быстрый способ, которым я могу придумать, - это следовать блогу Джима Дрисколла, который вы цитировали, и повторно использовать существующий механизм AJAX, предлагаемый тегом <f:ajax>, оборачивая свой собственный пользовательский компонент на основе Java в составной компонент.

В примере Джима, я предполагаю, что следующий код из строки 22 в его примере - это то, что вы должны визуализировать внутри вашей onSliceClick функции:

String click = behaviors.get("click").get(0).getScript(behaviorContext);

Тогда это будет выглядеть примерно так:

<ui:component
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:cc="http://java.sun.com/jsf/composite"
    xmlns:cu="http://javaserverfaces.dev.java.net/demo/custom-taglib" 
>
    <cc:interface shortDescription="Some Description">
        <cc:attribute name="render" required="false" />     
        <cc:attribute name="clickAction" method-signature="java.lang.Object action" required="true" shortDescription="The click action method" />
    </cc:interface>
    <cc:implementation>
        <cu:custom id="customId">
            <f:ajax render="#{cc.attrs.render}" listener="#{cc.attrs.clickAction}"/>
        </cu:custom>
    </cc:implementation>
</ui:component>

Обратите внимание, что я не проверял это, но это общая идея.Конечно, все это также можно сделать непосредственно в коде Java, но это, безусловно, требует дополнительной работы.

0 голосов
/ 28 декабря 2011

Похоже, что вы хотите иметь возможность кодировать поведение в стиле ajax в своем скомпилированном коде Java, интегрируя его со стеком J2ee.

Подходящая структура - это шов JBOSS

  1. По желанию Seam напрямую интегрируется с JSF (GWT - это более легкая, автономная, полнофункциональная инфраструктура веб-приложений - в ней нет множества встроенных функций для прямой интеграции с JMS и другими современными функциями J2ee ) ...

  2. Seam напрямую поддерживает компоненты с поддержкой ajax в стиле GWT.

Здесь есть хорошее руководство: http://www.ibm.com/developerworks/java/library/j-seam3/

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