我在学习Tiles框架过程,目前碰到下面这个难缠的问题,请各位给予解答。
      我建立好了模板页,并且编写好了Tiles框架的配置文件tiles-defs.xml,并且在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="defaultLayout" path="/WEB-INF/TilesLayout/tilesLayout.jsp">
   <put name="logo" value="/WEB-INF/TilesLayout/top.jsp"></put>
   <put name="nav" value="/WEB-INF/TilesLayout/left.jsp"></put>
   <put name="content" value="/WEB-INF/TilesLayout/content.jsp"></put>
   <put name="bottom" value="/WEB-INF/TilesLayout/Author.jsp"></put>
 </definition>
 <definition name="userRegister" extends="defaultLayout">
 <put name="content" value="/admin/userRegister.jsp"></put>
 </definition>
</tiles-definitions>
 我设计了一个用户登录界面,当用户输入的用户名和密码正确时,则显示Tiles组件:defaultLayout,若不成功则显示错误页面,其struts-config.xml中针对该用户请求的的配置代码如下:
<action
      attribute="userForm"
      input="/admin/login.jsp"
      name="userForm"
      path="/userLogin"
      scope="request"
      type="cn.edu.zjut.Action.UserLoginAction"
      validate="false">
      <set-property property="cancellable" value="false" />
      <forward name="loginSuccess" path="defaultLayout" />
      <forward name="loginFailure" path="/admin/loginFailure.html" />
    </action>
但是,当我输入正确的用户名和密码时,页面跳转之时却提示以下错误信息:
description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: java.lang.IllegalArgumentException: Path defaultLayout does not start with a "/" character
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
cn.edu.zjut.Servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:23)
root cause java.lang.IllegalArgumentException: Path defaultLayout does not start with a "/" character
org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:107)
org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
cn.edu.zjut.Servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:23)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
各位请帮忙解决,这个问题已经困扰我很久了,小弟在这先谢过了!

解决方案 »

  1.   


    先改下,试试<?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="defaultLayout" path="/WEB-INF/TilesLayout/tilesLayout.jsp">
       <put name="logo" value="/WEB-INF/TilesLayout/top.jsp"></put>
       <put name="nav" value="/WEB-INF/TilesLayout/left.jsp"></put>
       <put name="content" value="${content}"/>
       <put name="bottom" value="/WEB-INF/TilesLayout/Author.jsp"></put>
     </definition>
     <definition name="userRegister" extends="defaultLayout">
     <put name="content" value="/admin/userRegister.jsp"></put>
     </definition>
     <definition name="successShow" extends="defaultLayout">
     <put name="content" value="/WEB-INF/TilesLayout/content.jsp"></put>
     </definition>
    </tiles-definitions>
    <action
          attribute="userForm"
          input="/admin/login.jsp"
          name="userForm"
          path="/userLogin"
          scope="request"
          type="cn.edu.zjut.Action.UserLoginAction"
          validate="false">
          <set-property property="cancellable" value="false" />
          <forward name="loginSuccess" path="successShow" />
          <forward name="loginFailure" path="/admin/loginFailure.html" />
        </action>
      

  2.   

    <forward name="loginSuccess" path="/defaultLayout" />
    试试呢
    好久没用titles了