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


Автор: Матильда 5.2.2009, 12:37
Доброго времени суток!
Помогите решить проблему с tiles. У меня загружается основная страница, но когда я пытаюсь по ссылке перейти на вторую страницу, то получаю javax.servlet.ServletException: java.lang.IllegalArgumentException: Path page.welcome1 does not start with a "/" character. Не могу понять в чем ошибка.

struts-config. xml
Код

<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">


<struts-config>

      <action-mappings>

        <action path="/tiles_page" forward="/example.jsp"/>   

              <action path="/welcome1"
                  type="mypackage.tiles.Tiles_Action">
            <forward name="showWelcome1" path="page.welcome1"/>
        </action>

             <action path="/welcome2"
                type="mypackage.tiles.Tiles_Action_2">
            <forward name="showWelcome2" path="page.welcome2"/>
        </action>
      </action-mappings>

    <message-resources parameter="mypackage.MytestResources"/>

    <plug-in className="org.apache.struts.tiles.TilesPlugin" >
       <set-property property="definitions-config" value="/WEB-INF/tiles/tiles-defs.xml" />
       <set-property property="moduleAware" value="true" />
    </plug-in>

</struts-config>


tiles-defs.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">


<tiles-definitions>

    <definition name="base.definition" path="/tiles/tiles_template.jsp">
        <put name="title" type="string" value="Base" />
        <put name="header" value="/tiles/header.jsp" />
        <put name="menu" value="/tiles/menu.jsp" />
        <put name="body" value="/tiles/body.jsp" />
        <put name="footer" value="/tiles/footer.jsp" />
    </definition>

    <definition name="page.welcome1" extends="base.definition">
        <put name="title" type="string" value="Welcome 1" />
        <put name="body" value="/tiles/welcome1.jsp" />      
     </definition>

     <definition name="page.welcome2" extends="base.definition">
        <put name="title" type="string" value="Welcome 2" />
        <put name="body" value="/tiles/welcome2.jsp" />
     </definition>

</tiles-definitions>


tiles_tempale.jsp
Код

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-tiles" prefix="tiles" %>

<html>

<head>
    <title> <tiles:getAsString name="title" ignore="true"/> </title>
</head>

<body>

    <table border="1" cellpadding="0" cellspacing="0" width="100%" bordercolor="#000000" bgcolor="#E7FDFE">
        <tr>
            <td width="100%" colspan="2" valign="top"> <tiles:insert attribute="header"/> </td>
        </tr>
        <tr>
            <td width="23%"> <tiles:insert attribute="menu"/> </td>
            <td width="77%" valign="top" valign="top"> <tiles:insert attribute="body"/> </td>
        </tr>
        <tr>
            <td width="100%" colspan="2" valign="top"> <tiles:insert attribute="footer"/></td>
        </tr>
    </table>

</body>

</html>


example.jsp
Код

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-tiles" prefix="tiles" %>

<tiles:insert page="/tiles/tiles_template.jsp" flush="true">
    <tiles:put name="title" type="string" value="Base" />
    <tiles:put name="header" value="/tiles/header.jsp" />
    <tiles:put name="menu" value="/tiles/menu.jsp" />
    <tiles:put name="body" value="/tiles/body.jsp" />
    <tiles:put name="footer" value="/tiles/footer.jsp" />
</tiles:insert>


menu.jsp
Код

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-tiles" prefix="tiles" %>

Navigation <br />
<html:link action="/welcome1">welcome 1 page</html:link> <br />
<html:link action="/welcome2">welcome 2 page</html:link> <br />

Автор: necromancer 5.2.2009, 14:02
я не крупный спец в tiles =)
но попробуй заменить
 <forward name="showWelcome1" path="page.welcome1"/>
на 
 <forward name="showWelcome1" path="/page.welcome1"/>

по крайней мере попробовать стоит =)

Автор: Матильда 5.2.2009, 14:38
Попробовала. Получила: The requested resource (/testStruts3/tiles/page.welcome1) is not available.

Автор: necromancer 6.2.2009, 10:32
так наверное  path="page.welcome2" должен указывать на реальную jsp?

Автор: Матильда 6.2.2009, 10:43
Цитата

так наверное  path="page.welcome2" должен указывать на реальную jsp?


path="page.welcome2" указывает на реальную страницу welcome2.jsp. Такая страница у меня существует.

Автор: powerOn 6.2.2009, 16:54
Модератор: Название темы должно отражать ее суть!

Автор: Матильда 10.2.2009, 18:26
Вопрос все еще актуален. Помогите, пожалуйста!

Автор: polosatij 11.2.2009, 15:17
Цитата(Матильда @  10.2.2009,  17:26 Найти цитируемый пост)
Вопрос все еще актуален. Помогите, пожалуйста!


попробуй перейти по ссылке не на вторую страницу, а на первую и посмотри, получится ли  smile 

Автор: Матильда 11.2.2009, 15:41
К сожалению, на первую страницу перейти тоже не получается:
javax.servlet.ServletException: java.lang.IllegalArgumentException: Path page.welcome1 does not start with a "/" character.

Автор: polosatij 11.2.2009, 15:54
Цитата(Матильда @  11.2.2009,  14:41 Найти цитируемый пост)
К сожалению, на первую страницу перейти тоже не получается:
javax.servlet.ServletException: java.lang.IllegalArgumentException: Path page.welcome1 does not start with a "/" character.


посмотри в .html выходном, какой путь он сгенерировал:

<html:link action="/welcome1">welcome 1 page</html:link> <br />

Автор: Матильда 12.2.2009, 14:53
Цитата

посмотри в .html выходном, какой путь он сгенерировал:


<a href="/testStruts3/tiles/welcome1.do">welcome 1 page</a> <br /> 

 но я все равно не понимаю, как решить проблему.

Автор: polosatij 12.2.2009, 16:37
Цитата(Матильда @  12.2.2009,  13:53 Найти цитируемый пост)
testStruts3


вопрос.. откуда он это взял? где это прописано? smile

попробуй в браузере вызвать: /tiles/welcome1.do smile

Автор: Матильда 12.2.2009, 16:59
Цитата

попробуй в браузере вызвать: /tiles/welcome1.do 


Вызвала. Результат:
javax.servlet.ServletException: java.lang.IllegalArgumentException: Path page.welcome1 does not start with a "/" character

Автор: polosatij 12.2.2009, 17:46
Цитата(Матильда @  12.2.2009,  15:59 Найти цитируемый пост)
javax.servlet.ServletException: java.lang.IllegalArgumentException: Path page.welcome1 does not start with a "/" character


млин..  smile  ню, так поставь ему "/" и вызови "/tiles/welcome1.do"  smile 

пс: от куда взялся testStruts3 ?

Автор: Матильда 12.2.2009, 18:12
Цитата

ню, так поставь ему "/" и вызови "/tiles/welcome1.do" 


Куда поставить "/"? Он у меня вроде как уже везде стоит: <html:link action="/welcome1">welcome 1 page</html:link> <br />

а это в struts-config.xml : 
             <action path="/welcome1"
                  type="mypackage.tiles.Tiles_Action">
            <forward name="showWelcome1" path="page.welcome1"/>
        </action>


Цитата

от куда взялся testStruts3 ? 
 

testStruts3 - это имя моего приложения.

Автор: polosatij 17.2.2009, 00:28
Цитата(Матильда @  12.2.2009,  17:12 Найти цитируемый пост)
Куда поставить "/"? 


млин.. ню, как это куда..  smile он ведь тебе говорит: Path page.welcome1 does not start with a "/" character

1).

Код

<action path="/welcome1" type="mypackage.tiles.Tiles_Action">
        <forward name="showWelcome1" path="/page.welcome1"/>
</action>


2).


Цитата(Матильда @  6.2.2009,  09:43 Найти цитируемый пост)
path="page.welcome2" указывает на реальную страницу welcome2.jsp. Такая страница у меня существует. 


это ты думаешь, что она у тебя существует.. а ты сделай страницу: 

page.welcome1 и положи её по адресу: /testStruts3/tiles/page.welcome1

и напиши в ней "test smile".. если страница эта вызовется, то не работает конфигурация твоего tiles, значит ты уже знаешь где копать..  smile 

Автор: catdp 17.2.2009, 00:49
///

Автор: Матильда 17.2.2009, 17:33
Цитата

это ты думаешь, что она у тебя существует.. а ты сделай страницу: 
page.welcome1 и положи её по адресу: /testStruts3/tiles/page.welcome1


Зачем мне страница page.welcome1? У меня есть стрница welcome1. Если написать 
Код

<action path="/welcome1" type="mypackage.tiles.Tiles_Action">
<forward name="showWelcome1" path="/welcome1"/>
</action>
то у меня прекрасно эта самая welcome1 вызывается. Но мне-то нужно не это. Я хочу разобраться с Tiles, который позволяет собирать страницы повторно используя части разметки. В tiles-defs.xml я определяю page.welcome1
 
Код

   <definition name="page.welcome1" extends="base.definition">
        <put name="title" type="string" value="Welcome 1" />
        <put name="body" value="/tiles/welcome1.jsp" />
     </definition>

base.definition задает базовые параметры с которыми собирается страница. И содержимое страницы welcome1  должно отображаться в той части шаблона, которая у меня называется  body. А проблема заключается в том, что оно там отображаться не хочет.

Сразу хочу сказать, что если написать: name="/page.welcome1"  и  path="/page.welcome1", то  это не поможет.

Автор: polosatij 17.2.2009, 18:58
Матильда, мне не нужно объяснять, что такое Tiles  smile 

я на прошлой недели прикрутил Tiles к SpringMVC. Так вот, там на каждую страницу нужно писать разметку и просто так не вызвать страницу без Tiles. Посему, я предположил, что если ты напрямую сможешь что-то вызвать, то скорее всего что-то не впорядке с твоей конфигурацией  smile 

попробуй забить на свой проект и построить маленький проект с Tiles и поиграться с прямыми вызовами и прочим, это иногда даёт понять, как нужно строить, а как нет  smile  

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