2012-01-14 36 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是一个bean的属性,我设置一次AJAX调用完成。但这不是加载数据。我可以看到ajax方法正在调用。

+0

为什么POST请求发送到'jspPath +'/ myCommunity/AJAX/hotTopicDiscussion.faces''你做实际的JSF Ajax请求过吗? – 2012-01-14 11:08:26

+1

'h:panelGroup'中的'rerendered'属性是什么?它确实存在吗? – 2012-01-14 11:10:49

回答

1

看来,你的电话jsf.ajax.request是不正确的。据的requestJsDoc reference参数被以下:

源: 触发此Ajax请求,或元件的ID字符串作为触发元件使用的DOM元素。

事件: 触发此Ajax请求的DOM事件。事件参数是可选的。

选项: 这组可用选项可作为请求参数发送,以控制客户端和/或服务器端请求处理。

所以第一个元素必须是某个元素内部的形式或可能是自己的形式。您可以尝试将表单的ID或表单元素本身传递给此函数。

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>等等)。

如果你确实确实需要提交一个表单,那么最简单的方法就是让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" /> 
+0

嗨,hotTopicDiscussion.xhtml只有 – smitas 2012-01-17 19:31:03

+0

hotTopicDiscussion.xhtml有ajax调用类似于: \t 。这被页面载入中的其他页面调用,并且渲染部分仅在这个页面上 – smitas 2012-01-17 19:31:48