Теги jQuery AJAX JSF / jsf не идентифицированы. Не удается найти FacesContext

#jquery #ajax #jsf

#jquery #ajax #jsf

Вопрос:

Я столкнулся с проблемой при использовании комбинации jquery ajax и jsf. Я не совсем уверен, что это обычная проблема и с ней можно справиться, но надеюсь получить решение.

вот сценарий. мы разрабатываем проект портала с помощью jsf. таким образом, на странице нам приходится загружать огромные данные в виде строк в таблице (иногда 300-400 appx), и в каждой строке будет ссылка, которая должна открывать всплывающее окно. итак, чтобы не снизить производительность страницы, я планирую отложить загрузку jsp (всплывающего содержимого). поэтому я решил использовать ajax. jsp содержит теги jsf, которые не распознаются загрузкой ajax. Я понимаю, что когда jsp загрузится с помощью ajax, это будет простая / независимая (не подтвержденная jsf’ом) версия.

итак, мой вопрос: как я могу сделать jsp (всплывающее содержимое) в этом сценарии jsf’подтвержденным, чтобы теги 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> :amp;nbsp;<span class="headerValueForPopup"><%=lineDetails.getDisplayableOrderLineId()%></span></td>
                                    <td class="editLineHeaderDarkCenter">  
                                        <span class="">Order Number</span>  :amp;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>
  

Комментарии:

1. просто к вашему сведению. мы используем фреймворк jsf1.2 core. поэтому я даже не могу использовать ajax4jsf.

2. richfaces 3.3 отлично работает с jsf 1.2, поэтому вы можете использовать a4j, если хотите. Это не ответ на ваш вопрос, но я подумал, что должен упомянуть об этом.

3. Спасибо, Дэйв. На самом деле клиент, по крайней мере, в течение некоторого времени, не готов вводить какие-либо новые функции. поэтому было интересно, могу ли я найти какой-либо обходной путь для того, что я делаю.

Ответ №1:

не удается найти FacesContext

Вы получите это исключение при запуске страницы JSP с компонентами JSF как «простого ванильного» JSP без вызова FacesServlet . Он отвечает за создание FacesContext . URL запроса должен соответствовать <url-pattern> из FacesServlet , как это было определено в web.xml , чтобы все теги JSF выполнялись должным образом.

Предполагая, что шаблон URL является *.jsf , тогда вам нужно изменить

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

Для

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

Комментарии:

1. Спасибо BalusC. Я тоже пытался сделать то, что вы указали выше. по-прежнему безуспешно. На самом деле у нас есть шаблон URL, определенный как /portlet /*. как показано ниже: <имя сервлета> Сталкивается с сервлетом</servlet-name> <url-шаблон>/ портлет /*</url-шаблон>. итак, я использовал это для тестирования: url: ‘<%=RenderResponse.encodeURL(RenderRequest.getContextPath() «/portlet / tempLoader.jsp») %>’,

2. tempfolder — это папка моего рабочего пространства, в которой находится jsp. я уверен, что способ, которым я получаю доступ: url: ‘<%=RenderResponse.encodeURL(RenderRequest.getContextPath() «/ portlet / tempLoader.jsp») %>’ неверен. Пожалуйста, поправьте меня, указав правильный URL. я сомневаюсь в «/ portlet / tempLoader.jsp».

3. Я имею в виду, что это было в вашем исходном URL, но больше не в вашем новом URL. Разве это не должно быть /portlet/tempfolder/tempLoader.jsp ?

4. @BalusC: я пытался сохранить /portlet /tempfolder /tempLoader.jsp, но все равно это не сработало. Ну, я вижу открытие страницы, но я не вижу компоненты, специфичные для тега jsf. на странице также есть некоторые html-элементы, они отображаются правильно, но когда дело доходит до jsf- нет. на консоли я вижу исключение с нулевым указателем.

5. Я не уверен, что вы слишком упростили код JSP или нет, но для тегов JSF требуется <f:view> корневой тег.