AJAX с UI: вставить в JSF - PullRequest
       1

AJAX с UI: вставить в JSF

2 голосов
/ 07 января 2012

У меня есть страница JSF следующим образом:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
      ...
    </h:head>
<h:body>
    <h:form>
      <div id="VERTICAL_MENU">
          <ul id="menu" class="mainMenu">
             <li><div class="noSub"></div><h:commandLink action="customerVoice.xhtml"><h2>contact</h2><f:ajax render="ContentLoader" /></h:commandLink></li>
</ul>
</div>
<div class="INNER_CONTENT_ROW" >
  <h:panelGroup id="ContentLoader" >
       <div id="CONTENT_CONTAINER">
           <ui:insert name="ContentPage" >Default Content</ui:insert>
       </div>
   </h:panelGroup>
</div>
</h:form>
</h:body>

Я хочу загрузить содержимое <ui:insert> на <f:ajax>, но оно не работает.

Желаемый контент выглядит следующим образом:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:composition template="/parentBranches.xhtml">
        <ui:define name="ContentPage" >
            <div id="pageContent" >
                <div id="TITLE" ><h1 class="tBox" ><h:outputText value="در دست ساخت" /></h1></div>
                <div class="fullClear" ></div>
                <div class="UP_BUttON" >
                    <h:commandLink ><img src="images/feed.png" class="feedButton" /></h:commandLink>
                    <h:commandLink ><img src="images/printer.png" class="printButton" /></h:commandLink>
                </div>
                <div class="fullClear" ></div>
                <div id="CONTEXT" >
                    <div class="cImg" ><h:graphicImage url="images/sample.png" /></div>
                    <h:outputText value="content" />
                </div>
            </div>
        </ui:define>
    </ui:composition>
</html>

Когда я нажимаю на ссылку, никакие действия не выполняются, и содержимое страницы не изменяется.

1 Ответ

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

JSF <ui:insert> используется при создании шаблонов.В соответствии с вашим кодом, я думаю, что 1-й кусок кода - это шаблон parentBranches.xhtml.И второй фрагмент кода - это шаблон клиента customerVoice.xhtml, который использовал вышеупомянутый шаблон.Вкратце, template + template client = page.Если вы хотите открыть страницу customerVoice.xhtml, вам нужно перейти на эту страницу.Вы не можете сделать это с Ajax.

В общем, я могу придумать 2 способа достижения вашей цели:

  1. Не используйте Ajax, удалив весь <f:ajax>, и оставьте его как:

    <h:commandLink action="customerVoice"><h2>contact</h2></h:commandLink>
    
  2. Использование <ui:include>.

    • На своей первой странице .xhtml вы можете изменить часть ContentLoader на что-то вроде этого:

      <h:panelGroup id="ContentLoader" >
         <div id="CONTENT_CONTAINER">
            <ui:include src="#{mrBean.page}" />
         </div>
      </h:panelGroup>          
      
    • Изменить ссылкунапример:

      <h:commandLink actionListener="#{mrBean.openPage('customerVoice.xhtml')}"
                     value="contact" style="font-size: large">
         <f:ajax render="ContentLoader" />
      </h:commandLink>
      
    • Создайте ManagedBean для управления содержимым.Это должно быть так:

      @ManagedBean
      @RequestScoped
      public class MrBean {
         private String page;
      
         public MrBean() {
            this.page = "The link to the page that contains your default content";
         }
      
         public void openPage(String thePage) {
            this.page = thePage;
         }
      }
      

Вы можете взглянуть на этот ответ для другого примера о <ui:include>.Это руководство от Mkyong.com также может быть полезно для вас.

ОБНОВЛЕНИЕ: Это тестовая страница, на которой вы можете попробовать:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body >
        <h:form id="form"> 
            <h:commandLink actionListener="#{mrBean.openPage('Full URL to your customerVoice.xhtml')}"
                           value="contact" style="font-size: large">
                <f:ajax render="ContentLoader" />
            </h:commandLink>

            <h:panelGroup id="ContentLoader" >
                <div id="CONTENT_CONTAINER">
                    <ui:include src="#{mrBean.page}" />
                </div>
            </h:panelGroup> 

        </h:form>
    </h:body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...