tiles - “Attribute 'x' not found”

ε祈祈猫儿з 提交于 2019-12-24 22:55:41

问题


I'm working on a web project and I use tiles to have multiple jsp's in one jsp. I've encountered a problem where I get TilesIOException.

I have this jsp with the name: mainpage.jsp which contains all the jsp's for header, body and footer. My body here should also contain some other jsp's and therefore I'm trying to use tiles in that as well with no luck.

Here's the structure and the xml code in tiles.

mainpage.jsp
----header.jsp
----body.jsp(mainpageBody.jsp)
--------bodybox1.jsp
--------bodybox2.jsp
--------bodybox3.jsp
--------bodybox4.jsp
----footer.jsp

tiles.xml:

<definition name="mainpage" extends="mainpageLayout">
<put-attribute name="title" value="Welcome" />
<put-attribute name="body" value="/mainpage/mainpageBody.jsp" />
    <put-attribute name="mainbox0" value="/bodybox1.jsp" />
    <put-attribute name="mainbox1" value="/bodybox2.jsp" />
    <put-attribute name="mainbox2" value="/bodybox3.jsp" />
    <put-attribute name="mainbox3" value="/bodybox4.jsp" />
</definition>

<definition name="mainpageLayout" template="/mainpage.jsp">
<put-attribute name="title" value="Template" />
<put-attribute name="header" value="/mainpage/header.jsp" />
<put-attribute name="body" value="/mainpage/body.jsp" />
<put-attribute name="footer" value="/mainpage/footer.jsp" />
</definition>

Her is my mainpageBody.jsp:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ page import="java.text.*,java.util.*"%>

<script type="text/javascript">
    function showRegisterUserPage() {
        $(".frontpageBodyContent").load("showRegisterPageRegisterAction");
    }
</script>
<div class="frontpageBodyContent">
    <div id="frontPageContentDiv">
        <table border="0" style="width:100%">
            <tbody>
                <tr>
                    <td>
                        <div id="bodybox1">
                            <tiles:insertAttribute name="bodybox1" />
                        </div>
                    </td>
                    <td>
                        <div id="bodybox2">
                            <tiles:insertAttribute name="bodybox2" />
                        </div>
                    </td> 
                </tr>
                <tr>
                    <td>
                        <div id="bodybox3">
                            <tiles:insertAttribute name="bodybox3" />
                        </div>
                    </td>
                    <td>
                        <div id="bodybox4">
                            <tiles:insertAttribute name="bodybox4" />
                        </div>
                    </td> 
                </tr>
            </tbody>
        </table>
    </div>
</div>

WEB-INF folder contains: lib folder, tiles.xml & web.xml. lib folder doesn't contain anything.

struts.xml:

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

<struts>
    <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
    <constant name="struts.enable.SlashesInActionNames" value="true"/>
    <constant name="struts.action.extension" value=",action"/>

    <package name="default" extends="struts-default">
        <result-types>
            <result-type name="tiles"
                class="org.apache.struts2.views.tiles.TilesResult" />
        </result-types>

        <action name="*MainAction" method="{1}" class="com.x.web.action.MainAction">
            <result name="mainpage" type="tiles">mainpage</result>
            <result name="success">index.jsp</result>
        </action>

        <action name="*RegisterAction" method="{1}" class="com.x.web.action.RegisterAction">
            <result name="registeruserpage" type="tiles">registeruserpage</result>
            <result name="redirect" type="redirect">${redirectUrl}</result>
        </action>



    <action name="registrering" method="showRegisterUserPage" class="com.x.web.action.RegisterAction">
        <result name="registeruserpage" type="tiles">registeruserpage</result>
    </action>

</package>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <javaee:display-name>X</javaee:display-name>
    <context-param>
        <javaee:param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
        </javaee:param-name>
        <javaee:param-value>/WEB-INF/tiles.xml</javaee:param-value>
    </context-param>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <listener>
        <javaee:listener-class>org.apache.struts2.tiles.StrutsTilesListener
        </javaee:listener-class>
    </listener>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

I get exceptions: org.apache.tiles.TilesException:

ServletException including path '/templates/mainpage.jsp'.

org.apache.tiles.util.TilesIOException: JSPException including path '/content/mainpage/mainpageBody.jsp'.

org.apache.tiles.TilesException: Attribute 'bodybox1' not found.

What am I doing wrong? Help would be highly appreciated, thanks on advance!


回答1:


Try this web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>X</display-name>

    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>
    <context-param>
        <param-name>tilesDefinitions</param-name>
        <param-value>/WEB-INF/tiles.xml</param-value>
    </context-param>
        <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

and check that tiles.xml in WEB-INF folder.



来源:https://stackoverflow.com/questions/23510695/tiles-attribute-x-not-found

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!