Частичная визуализация JSF 2.0 на странице при загрузке документа - PullRequest
1 голос
/ 14 января 2012

У меня есть страница, один раздел которой я хочу загрузить только после загрузки всей страницы. Для этого я использую следующий код на странице:

<script type="text/javascript">
    alert("In the JS");
    $(document).ready(
        function() {
            $.post(jspPath+'/myCommunity/ajax/hotTopicDiscussion.faces', 
                function(data) {
                    jsf.ajax.request(this, 'post', {render: 'discussionTopic'});
                }
            );  
        }
    );
</script>

также

<h:panelGroup id="discussionTopic" reRendered="#{discussionBean.doRender}">

Это doRender - это свойство bean-компонента, которое я устанавливаю после завершения вызова AJAX. Но это не загрузка данных. Я вижу, как вызывается метод ajax.

Ответы [ 2 ]

1 голос
/ 14 января 2012

Вам действительно нужно отправить форму без участия пользователя?Вот для чего jsf.ajax.request().Кажется, что вы просто хотите загрузить статический контент внутри некоторого <div>.Просто сделайте следующее

<script>
    $(document).ready(function() {
        $.get("#{request.contextPath}/myCommunity/ajax/hotTopicDiscussion.faces", function(data) {
            $("#discussionTopic").html(data);
        });
    });
</script>
<h:panelGroup id="discussionTopic" layout="block" />

Или, проще, с jQuery.load():

<script>
    $(document).ready(function() {
        $("#discussionTopic").load("#{request.contextPath}/myCommunity/ajax/hotTopicDiscussion.faces");
    });
</script>
<h:panelGroup id="discussionTopic" layout="block" />

В обоих случаях я предполагаю, что hotTopicDiscussion.xhtml имеет <ui:composition> в качестве корневого элемента, и что он содержит только необходимый HTML (и, следовательно, не <html> и т. Д.).

Если вам действительно действительно необходимо отправить форму ajaxical, то самое простоебыло бы позволить JS "нажать" кнопку программно.Он будет делегировать весь путь до правильного и необходимого jsf.ajax.request() вызова.Вызов jsf.ajax.request() бесполезен в любом случае без физического компонента формы / кнопки на странице.При необходимости вы можете скрыть форму с помощью CSS.

<script>
    $(document).ready(function() {
        $("[id='form:button']")[0].onclick();
    });
</script>
<h:form id="form" style="display:none;">
    <h:commandButton id="button" action="#{bean.submit}">
        <f:ajax render=":discussionTopic" />
    </h:commandButton>
</h:form>
<h:panelGroup id="discussionTopic" layout="block" />
1 голос
/ 14 января 2012

Похоже, ваш звонок jsf.ajax.request неверен. Согласно справке JsDoc аргументы request следующие:

Источник: Элемент DOM, который вызвал этот Ajax-запрос, или строка id элемента, который будет использоваться в качестве инициирующего элемента.

событие: Событие DOM, которое вызвало этот запрос Ajax. Аргумент события является необязательным.

опции: Набор доступных параметров, которые можно отправлять в качестве параметров запроса для управления обработкой запросов на стороне клиента и / или сервера.

Таким образом, первый элемент должен быть каким-то элементом внутри формы или может быть самой формой. Вы можете попытаться передать идентификатор функции или сам элемент формы этой функции.

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