2012-01-14 2 views
1

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

<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 является свойством боба, который я установил только вызов AJAX делается. Но это не загрузка данных. Я вижу, что метод ajax вызывается.

+0

Почему отправить запрос на запись 'jspPath + '/ myCommunity/Ajax/hotTopicDiscussion.faces'', прежде чем сделать фактический запрос JSF Ajax? –

+1

Что такое атрибут 'rerendered' в' h: panelGroup'? Это действительно существует? –

ответ

1

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

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

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

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

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

1

У вас действительно необходимо отправить форму аяксиально? Вот где 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> и прочее).

Если вы действительно действительно необходимо отправить форму ajaxically, то проще всего было бы позволить JS «щелкнуть» кнопку программно. Он будет делегировать весь путь до надлежащего и необходимого вызова jsf.ajax.request(). A 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" /> 
+0

Привет, hotTopicDiscussion.xhtml имеет только – smitas

+0

hotTopicDiscussion.xhtml имеет ajax-вызов что-то вроде: \t .Это вызвано другой страницей на pageload, и часть рендеринга находится на этой странице только – smitas

Смежные вопросы