如何修改struts-dojo和/或struts-jquery中的路径(Struts 2.3.20.1)?

时间:2016-08-17 12:24:08

标签: struts2 tomee struts2-jquery tiles2

在我开始解决问题之前我的开发设置:

  • Struts 2:2.3.20.1
  • Tiles 2:2.0.6
  • Struts2-DoJo-Plugin:2.3.20.1
  • Struts2-JQuery-Plugin:3.7.1
  • TomEE 7.0.55
  • Java 8:1.8.0_25
  • IDE:IntelliJ 2016.2 Ultimate

现在我的问题:

我想在Struts2-Dojo或* -JQuery中使用DateTimePicker,但是对于这两个API,我在生成的HTML方面都会得到错误的路径。

看看这些图片我的结果是什么:

Struts 2 - DOJO(第一浏览器视图,第二个HTML src) Struts2-DOJO Browser view Struts2-DOJO HTML src

Struts 2 - JQuery(第一浏览器视图,第二个HTML src) Struts2 - JQuery Browser view Struts2 - JQuery HTML src

你看到我的问题了吗?双破折号? Struts为什么这样?这是Tiles的问题吗?

我只需要一个破折号,我在此链接之前查看了这个社区: Relative Path in Struts 2 - DOJO

...并测试一下(你可以在下面的BaseLayout.jsp下看到它)并且它对我的问题不起作用。

这是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
    <display-name>Struts Tiles 2 Demo</display-name>
    <context-param>
        <param-name>tilesDefinitions</param-name>
        <param-value>/WEB-INF/tiles.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>

    <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>
</web-app>

struts.xml:

<?xml version="1.0" encoding="UTF-8"?>

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

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="false"/>

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

        <default-action-ref name="start"/>

        <action name="start">
            <result name="success" type="tiles">index</result>
            <result name="error" type="tiles">err404</result>
        </action>

        <action name="err404">
            <result name="success" type="tiles">err404</result>
        </action>

        <action name="dbTest">
            <result name="success" type="tiles">dbTest</result>
            <result name="error" type="tiles">err404</result>
        </action>

        <action name="dtpJQ">
            <result name="success" type="tiles">dtpJQ</result>
            <result name="error" type="tiles">err404</result>
        </action>
    </package>
</struts>

tiles.xml:

<!DOCTYPE tiles-definitions PUBLIC
        "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
        "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>

    <definition name="baseLayout" template="/WEB-INF/tiles/layouts/BaseLayout.jsp">
        <put-attribute name="title" value="" />

        <put-attribute name="header" value="/WEB-INF/tiles/parts/Header.jsp" />
        <put-attribute name="menu" value="/WEB-INF/tiles/parts/Menu.jsp" />

        <put-attribute name="body" value="" />
        <put-attribute name="footer" value="/WEB-INF/tiles/parts/Footer.jsp" />

        <!-- only true or false -->
        <put-attribute name="isDojoActive" value="false" />
        <put-attribute name="isJQueryActive" value="false" />
    </definition>

    <definition name="index" extends="baseLayout">
        <put-attribute name="title" value=".: 1st Steps Base Layout Struts 2 :." />
        <put-attribute name="body" value="/WEB-INF/tiles/body/start.jsp" />
    </definition>

    <definition name="err404" extends="baseLayout">
        <put-attribute name="title" value=".: Test Error 404 Page :." />
        <put-attribute name="body" value="/WEB-INF/tiles/errorPages/404.jsp" />
    </definition>

    <definition name="dbTest" extends="baseLayout">
        <put-attribute name="title" value=".: DB Test :." />
        <put-attribute name="body" value="/WEB-INF/tiles/tableViews/dbTest.jsp" />
    </definition>

    <definition name="dtpTest" extends="baseLayout">
        <put-attribute name="title" value=".: Date Time Picker Test - START :." />
        <put-attribute name="body" value="/WEB-INF/tiles/body/testDTP.jsp" />
        <put-attribute name="isDojoActive" value="true" />
    </definition>

    <definition name="dtpJQ" extends="baseLayout">
        <put-attribute name="title" value=".: DTP JQ TEST :." />
        <put-attribute name="body" value="/WEB-INF/tiles/modules/dateTimePickerJQuery.jsp" />
        <put-attribute name="isJQueryActive" value="true" />
    </definition>

    <definition name="dateTimePicker" extends="baseLayout">
        <put-attribute name="title" value=".: Date Time Picker Test :." />
        <put-attribute name="body" value="/WEB-INF/tiles/modules/dateTimePicker.jsp" />
    </definition>
</tiles-definitions>

BaseLayout.jsp:

<%@page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="tiles"  uri="http://tiles.apache.org/tags-tiles" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<%@taglib prefix="sx" uri="/struts-dojo-tags" %>
<%@taglib prefix="sj" uri="/struts-jquery-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title><tiles:insertAttribute name="title" ignore="true" /></title>
    <style type="text/css">@import url(/css/main.css);</style>
    <s:set var="isDojoActive"><tiles:getAsString name="isDojoActive" /></s:set>
    <s:set var="isJQueryActive"><tiles:getAsString name="isJQueryActive" /></s:set>
    <s:if test='%{#isDojoActive.equals("true")}'>
        <sx:head baseRelativePath="/struts/dojo" debug="true" parseContent="false" />
    </s:if>
    <s:if test='%{#isJQueryActive.equals("true")}'>
        <sj:head />
    </s:if>
</head>
<body>
<div class="container">
    <div id="baseLeft"><tiles:insertAttribute name="menu" /></div>
    <div id="baseRight">
        <div class="inner-content header center"><tiles:insertAttribute name="header" /></div>
        <div class="inner-content body"><tiles:insertAttribute name="body" /></div>
        <div class="inner-content footer right"><tiles:insertAttribute name="footer" /></div>
    </div>
</div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

我发现了错误:

IntelliJ IDEA下的我的TomEE配置:

缺少根/应用程序上下文

IntelliJ IDEA Server Settings for Root Context