Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > jsp


Автор: 3,14 19.2.2008, 13:18
что то я совсем запутался. есть обычная стурктура страницы

Код

<html>
<body>
    header
    <table width="100%">
        <tr>
            <td>менюшка</td>
            <td>контент страницы</td>
        </tr>
    </table>
</body>
</html>


как сделать чтоб в самих страницах писать только контент, а всё остальное вынести в отдельную страницу... чуствую что taglib нужны, но как, что то не могу понять... никак не найду примеров...

Автор: iluvatar 19.2.2008, 14:02
Юзай tiles.

Автор: 3,14 19.2.2008, 14:16
iluvatar,  smile 

Автор: Maksym 19.2.2008, 14:20
3,14
Если это просто jsp то стандартное средство <%@ include file="MyContent.jsp" %> ...

Автор: 3,14 19.2.2008, 14:24
Maksym, хедер то так включишь, а как быть с таблицей, ведь содержание страницы это часть этой таблицы, как и менюшка, к-ая часть общего темплейта...

Автор: Maksym 19.2.2008, 14:34
3,14
То есть ты хочешь параметризовать этот инклюд?

Автор: 3,14 19.2.2008, 14:55
Maksym, ну не знаю, поможет ли тут параметризация, те при ней параметром нужно будеть сделть весь контент страницы. А я хочу решить данную проблему, не уверен что include  тут поможет...

Автор: powerOn 19.2.2008, 14:59
A https://facelets.dev.java.net/nonav/docs/dev/docbook.html не помогут? Сам глубоко в них не разбирался, но идея вроде похожая. 

Автор: 3,14 19.2.2008, 15:07
powerOn, я их  и так использую, но ничего для решения именно этой проблемы в них я не нашёл :(

Автор: AlexeyVorotnikov 19.2.2008, 15:28
Что-то я лично не понял в чём проблема? Можно поподробнее?

Может, <jsp:include> поможет?

Автор: PashaOvechkin 19.2.2008, 15:51
Если инклуд статичный, то используем директиву

 
Код

<%@ include file="relativeFragment.jsp" %>


если содержание хедера или футера меняется в зависимости от параметров, то йсп екшен ->
 
 
Код


<jsp:include page="{relativeURL | <%= expression %>}"    
   flush="true| false" >    
   <jsp:param name="parameterName"    
      value="{parameterValue | <%= expression %>}" />+    
</jsp:include>




Автор: Maksym 19.2.2008, 16:03
3,14
В смысле не нашел? У facelets же именно темплейтная парадигма. 

Шаблон (template.xhtml):
Код

<!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:ui="http://java.sun.com/jsf/facelets">

<head>

</head>
<body>
....
    <ui:insert name="content1" />
....
    <ui:insert name="content2" />
....
</body>
</html>



Страница (page.xhtml):
Код

<ui:composition template="template.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<ui:define name="content1">    
.....
</ui:define>    
    
<ui:define name="content2">
.....
</ui:define>
    
</ui:composition>


Добавлено через 3 минуты и 16 секунд
Любое количество insert'ов (точек вставки) в темплейте и define'ов (подстановок) в страницах, на месте многоточий -- любой валидный xhtml (который можно расширять tag'овыми библиотеками на базе jsf).
Можно делать вложенные темплейты.

Автор: Maksym 19.2.2008, 16:27
Пример простенькой компоненты в facelets. Типа показывает ошибки валидации формы.

В странице:

Код

<!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:ui="http://java.sun.com/jsf/facelets"
      xmlns:my="http://my/custom">
...
<my:err errors="#{flow.errors}" /> 
...
</html>


В custom.taglib.xml (кладется в WEB-INF):

Код

<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "https://facelets.dev.java.net/source/browse/*checkout*/facelets/src/etc/facelet-taglib_1_0.dtd?content-type=text%2Fplain&rev=1.3.16.1">
<facelet-taglib>

      <namespace>http://my/custom</namespace>
      <tag>
         <tag-name>err</tag-name>
         <source>../components/errors.xhtml</source>          
      </tag>     
                      
       ....

</facelet-taglib>


Библиотеку надо не забыть описать в web.xml:
Код

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
....
    <context-param>
        <param-name>facelets.LIBRARIES</param-name>
        <param-value>/WEB-INF/custom.taglib.xml</param-value>
    </context-param>
....

</web-app>



В components/errors.xhtml -- собственно компонента (тут моя конкретная реализация -- не важно, можно все что угодно наваять):
Код

<ui:component
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jstl/core">
<c:if test="#{!errors.haveMessages}">
    <div id="errorTable">
        <c:if test="#{errors.anyoneIdIsHighlighted}">
            <p class="error">#{bundle.common_validation_errors_common_text}</p>
        </c:if>    
        <il class="error">
            <c:forEach var="msg" items="#{errors.messages}">
                <li>#{msg}</li>
            </c:forEach>
        </il>  
    </div>   
</c:if>
</ui:component>



И все -- можно везде использовать. Очень удобно.

Автор: 3,14 20.2.2008, 22:20
PashaOvechkin, include решает проблему далеко не до конца, всё равно на странице остаётся много общих кусков:

Код

<html>
<head>
<%@ include file="head.jsp"%>
</head>
<body>
  <%@ include file="banner.jsp"%>
  <table width="100%">
     <tr>
        <td class="menu">
           <%@ include file="menu.jsp"%>
        </td>
        <td class="content">
            И вот только тут само содержимое страницы... :(
        </td>
     </tr>
  </table>
</body>
</html>


Добавлено через 1 минуту и 45 секунд
Maksym, похоже это то, что доктор прописал, попробую разобраться...

Автор: iluvatar 21.2.2008, 09:06
если юзаешь struts - лучше tiles не найти..

Автор: PashaOvechkin 21.2.2008, 11:02
Если честно, для меня загадка почему "include решает проблему далеко не до конца"? smile)
Во всех проектах, в которых участвовал, именно етими способами решались подобные проблемы.

Автор: 3,14 26.2.2008, 23:13
PashaOvechkin, а как ты при помощи include-ов в моём примере сделаешь чтоб на страницах не содержалось много общих кусков, к-ые можно вынести в один шаблон?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)