我們如何將Struts 2與Tiles 3集成?當前的struts2-tiles-plugin(2.3.4.1)與舊版本的tile(版本2.0.6)一起工作,這可能有點麻煩。如何將Struts 2與Tiles 3集成3
這是一個自我回答,幫助他人融合。
我們如何將Struts 2與Tiles 3集成?當前的struts2-tiles-plugin(2.3.4.1)與舊版本的tile(版本2.0.6)一起工作,這可能有點麻煩。如何將Struts 2與Tiles 3集成3
這是一個自我回答,幫助他人融合。
由於肯一個新的插件加入到Struts 2的支持磚3的結果類型,它應該是可用即將推出的新版本 - 的Struts 2.3.9
https://cwiki.apache.org/confluence/display/WW/Tiles+3+Plugin
解決方案是添加所需的依賴項,使用適當的偵聽器加載磁貼並創建自定義結果類型。幸運的是,這些步驟非常簡單,一旦完成,您可以按照正常的方塊2例子來定義模板。
1)依賴(先從基本的支柱項目,但在這個例子中,我將使用約定所以它可能只是最好加struts2中的約定,插件,它將包括struts2的核心等):
注意:更高版本的SLF4J依賴可能工作,我的沒有測試過這個。
2)用適當的聽衆
這個例子包含了完整的web.xml中,3-5行負荷磚,應該是新的人熟悉Struts2的唯一的事情。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</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>
3)創建自定義結果類型
我們需要定義一個自定義結果類型用我們的行動用途:
package com.quaternion.result;
import com.opensymphony.xwork2.ActionInvocation;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.ServletDispatcherResult;
import org.apache.tiles.TilesContainer;
import org.apache.tiles.access.TilesAccess;
import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.servlet.ServletRequest;
import org.apache.tiles.request.servlet.ServletUtil;
public class TilesResult extends ServletDispatcherResult {
public TilesResult() {
super();
}
public TilesResult(String location) {
super(location);
}
@Override
public void doExecute(String location, ActionInvocation invocation) throws Exception {
//location = "test.definition"; //for test
setLocation(location);
ServletContext context = ServletActionContext.getServletContext();
ApplicationContext applicationContext = ServletUtil.getApplicationContext(context);
TilesContainer container = TilesAccess.getContainer(applicationContext);
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ServletRequest servletRequest = new ServletRequest(applicationContext, request, response);
container.render(location, servletRequest);
}
}
4)我們還需要告知的struts2我們的結果類型:
<?xml version="1.0" encoding="UTF-8"?>
<!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.devMode" value="true" />
<constant name="struts.ui.theme" value="simple" />
<package name="tiles-package" namespace="" extends="struts-default">
<result-types>
<result-type default="true" name="tiles-result" class="com.quaternion.result.TilesResult"/>
</result-types>
</package>
</struts>
隨着那個出wa我們現在可以在我們的項目中使用瓷磚,假設我們已經創建了一個名爲「test」的瓷磚定義。定義」我們可以告訴我們的行動從做使用的定義如下:
package com.quaternion.demo.action.test;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
@ParentPackage("tiles-package")
@Result(type="tiles-result", location="test.definition")
public class QuaternionResultTest extends ActionSupport{}
就是這樣,這將讓你配置與瓷磚3+ struts2的任何版本,請參閱http://tiles.apache.org/framework/index.html進一步配置的詳細信息。
見http://mail-archives.apache.org/mod_mbox/struts-dev/201211.mbox/browser –
是的,我是爲了建立一個JIRA的任務......是你的意思? – Quaternion
在撰寫之前的評論時,我還不知道你和struts-dev的人是一樣的 –
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
使用您的tiles.xml提到的doctype
我一直在搞瓷磚拼成struts2約定,這是工作,但它不漂亮...也許我也可以發送你也是你呢? – Quaternion
請確定,這是第一次嘗試支持Tiles 3,所以我們可以在下一個版本中擴展它 –
在此接受了答案,因爲......此插件的工作量少得多。 – Quaternion