2011-05-25 76 views
1

我在使用jquery ajax和jsf组合时遇到问题。我不确定这是否是一个常见问题,可以处理,但希望得到解决方案。未标识JQuery AJAX JSF/jsf标记。找不到FacesContext

这里是场景。我们正在用jsf开发一个门户项目。所以在一个页面上,我们必须根据表格中的行载入大量数据(有时候appx 300-400),每一行都会有一个需要打开弹出窗口的链接。所以为了不击中页面的表现,我计划延迟加载jsp(弹出式内容)。所以认为去阿贾克斯。 jsp有jsf标签,这些标签没有被ajax负载识别。我明白当jsp加载ajax时,它将是一个普通/独立(un jsf'tified)版本。

所以我的问题是:我如何使jsp(弹出内容)在这种情况下jsf'tified,使jsf标签可见。

目前我越来越找不到FacesContext。

我用下面的代码:

jQuery.ajax({ 
    type: "GET", 
    cache: false, 
    contentType: "text/html; charset=ISP-8859-1" , 
    url: '<%=renderResponse.encodeURL(renderRequest.getContextPath()+ "/tempfolder/tempLoader.jsp") %>', 
    data:{param1:66, param2:88}, 
    success:function(msg) {  
     jQuery(".loadContent").html(msg); 
     jQuery("#viewpopupdiv").children().show(); 
    } 
}); 

而且我的jsp:

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%> 
<%@taglib uri="http://java.sun.com/portlet" prefix="portlet"%> 
<%@taglib uri="http://www.ibm.com/jsf/html_extended" prefix="hx"%> 
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> 


<div id="view" style="text-align:left"> 

<table class="viewpopupdiv" style="width:480px;background-color:#efedea;border-width: thin; border-color: #ff6633; border-style:solid;" cellpadding="0" cellspacing="0" border="0"> 
     <tr> 
      <td> 
       <table style="width:100%"> 
        <tr> 
         <td> 

          <table style="width:100%;background-color:#424341;"> 
           <tr> 
            <td class="editLineHeaderDarkLeft"> 
             <span class="">Line ID</span> :&nbsp;<span class="headerValueForPopup"><%=lineDetails.getDisplayableOrderLineId()%></span></td> 
            <td class="editLineHeaderDarkCenter"> 
             <span class="">Order Number</span> :&nbsp;<span class="orderNumberHeaderValueForPopup"><%=lineDetails.getDisplayableOrderHeaderId()%></span></td> 
            <td class="editLineHeaderDarkRight"><div href="#" onclick="closePopupForEditLine('closepopupdiv')"><img class="close" src='<%=imgURL%>' border="0"></div> 
            </td> 
           </tr> 
          </table> 

<td class="editLineHeaderDarkLeft">        
<div class="chargeTypeDropListJQ"> 
             <h:selectOneMenu value="#{popupBean.chargeTypeId}" styleClass="selectOneMenu"> 
              <f:selectItems value="#{popupBean.chargeType}" /> 
             </h:selectOneMenu> 
            </div> 
</td> 
        </tr> 
       </table> 
</td></tr></table></div> 
+0

仅供参考。我们正在使用jsf1.2核心框架。所以我甚至不能去ajax4jsf。 – user402959 2011-05-25 02:38:37

+1

richfaces 3.3运行良好w/jsf 1.2,所以你可以使用a4j如果你喜欢。这不是你的问题的答案,但我想我应该提到它。 – 2011-05-25 03:50:36

+0

谢谢戴夫。事实上,客户端还没有准备好,以便引入任何新功能。所以想知道我是否可以得到我正在做的任何解决方法。 – user402959 2011-05-25 04:07:47

回答

0

找不到FacesContext的

你会当您运行得到这个异常的JSP页面将JSF组件作为“普通香草”JSP进行,而不会调用FacesServlet。这是负责创建FacesContext的人员。请求URL需要与FacesServlet<url-pattern>相匹配,因为它已被定义为web.xml以使所有JSF标签正常运行。

假设URL模式*.jsf,那么你需要改变

url: '<%=renderResponse.encodeURL(renderRequest.getContextPath()+ "/tempfolder/tempLoader.jsp") %>', 

url: '<%=renderResponse.encodeURL(renderRequest.getContextPath()+ "/tempfolder/tempLoader.jsf") %>', 
+0

感谢BalusC。我也尝试过你在上面指定的内容。仍然没有运气。实际上我们将url-pattern定义为/ portlet/*。如下所示: Faces Servlet /portlet/*。所以我用这个来测试:url:'<%= renderResponse.encodeURL(renderRequest.getContextPath()+“/portlet/tempLoader.jsp”)%>', – user402959 2011-05-25 04:15:02

+0

'/ tempfolder'在哪里? – BalusC 2011-05-25 05:07:41

+0

tempfolder是jsp所在的工作空间文件夹。我相信我访问的方式:url:'<%= renderResponse.encodeURL(renderRequest.getContextPath()+“/portlet/tempLoader.jsp”)%>'是不正确的。请纠正我与正确的网址。我怀疑“/portlet/tempLoader.jsp”。 – user402959 2011-05-25 13:46:08