2016-10-16 20 views
0

私はStruts2 ver 2.5.2、DWR ver 2.0,5、およびSitemesh ver 2.5を統合しようとしています。私のDWRは(すでに)うまく動作しています。 [CONTEXT] /dwr/engine.js、util.js、[CONTEXT] /dwr/interface/Arithmetic.jsを開くことができます。Struts2の統合Sitemesh DWR

問題は、dwr呼び出しを含むindex.jspを開くと、dwr js変数が算術変数と同様に定義されていないことです。

index.jsp自体は、すでにSitemeshフィルタで装飾されています。

の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_3_0.xsd" 
id="WebApp_ID" version="3.0"> 

<display-name>Struts 2</display-name> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
<servlet> 
    <servlet-name>dwr-invoker</servlet-name> 
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> 
    <init-param> 
     <param-name>debug</param-name> 
     <param-value> true </param-value> 
    </init-param> 
    <init-param> 
     <param-name>crossDomainSessionSecurity</param-name> 
     <param-value>false</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dwr-invoker</servlet-name> 
    <url-pattern>/dwr/*</url-pattern> 
</servlet-mapping> 
<!-- Filters --> 
<filter> 
    <filter-name>struts-prepare</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter</filter-class> 
</filter> 
<filter> 
    <filter-name>sitemesh</filter-name> 
    <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> 
</filter> 
<filter> 
    <filter-name>struts-execute</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>struts-prepare</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter-mapping> 
    <filter-name>struts-execute</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>sitemesh</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<servlet> 
    <servlet-name>jspSupportServlet</servlet-name> 
    <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class> 
    <load-on-startup>5</load-on-startup> 
</servlet> 

<listener> 
    <listener- class>org.apache.struts2.dispatcher.listener.StrutsListener</listener-class> 
</listener> 
</web-app> 

decorators.xml

<?xml version="1.0" encoding="UTF-8"?> 
<decorators defaultdir="/decorators"> 
<excludes> 
    <pattern>/dwr/*</pattern> 
</excludes> 
<decorator name="basic-theme" page="basic-theme.jsp"> 
    <pattern>/*</pattern> 
</decorator> 
</decorators> 

dwr.xml

<!DOCTYPE dwr PUBLIC 
"-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" 
"http://directwebremoting.org/schema/dwr20.dtd"> 
<dwr> 
<allow> 
    <create creator="new" javascript="HelloAjaxService"> 
     <param name="class" value="com.test.struts.ajax.HelloAjaxService" /> 
    </create> 
</allow> 
</dwr> 

index.jspを

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Hello World</title> 
<script type="text/javascript" src="/strutsSitemesh/dwr/engine.js"></script> 
<script type='text/javascript' src='/strutsSitemesh/dwr/util.js'></script> 
<script type='text/javascript' src='/strutsSitemesh/dwr/interface /HelloAjaxService.js'></script> 
</head> 
<body> 
<div 
    style="background-color: #ffeaa7; font-weight: bold; width: 300px;" 
    id="divResponse"> 
    <s:form action="hello" method="post"> 
     <s:textfield id="name" name="name" label="Name" size="20" 
      onkeypress="sayHello()" /> 
     <s:textfield name="age" label="Age" size="20" /> 
     <s:submit name="submit" label="Submit" align="center" /> 
    </s:form> 

    <script type="text/javascript"> 
     function sayHello() { 
     console.log(dwr.util.getValue("name")); 
      HelloAjaxService.sayHelloAjax(function(data) { 
       dwr.util.setValue("divResponse", data); 
      }); 
     } 
    </script> 
</body> 
</html> 

私がフィルタマッピングのsitemesh ----とコメントした場合、DWRコールは正常に動作します。だから私は、要求は、SitemeshFilterでフィルタリングされ、奇妙にそれはDWRフィルタに移動しないと仮定します。私は、フィルターを順番に並べる方法を調べようとしましたが、何も出ません。どんな助けもありがたい。本当にありがとう。

答えて

1

そこで、dwr js宣言をindex.jspのbodyタグに移動して解決しました。私のdecorators.jspには<decorator:body>しか置かれていないため、decorators.jspの<head>タグが実際の.jspファイル(この場合はindex.jsp)よりも優先されます。

関連する問題