2007-09-18
dwr integration with struts2
关键字: dwr,struts2DWR 2.0 had come with some integration with Spring, Webwork, acegi, JSF, Struts1 and Hibernate.
But! no for Struts2.So must copy from package "org.directwebremoting.webwork" of DWR 2.0 Source and modify to make DWR can integration with Strtus2.The important thing is to modify DWRAction.java file; and other java file is only to modify the package reference(if necessary).
^_^,of course, this modification is base on googling...
java 代码
- import java.io.UnsupportedEncodingException;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.directwebremoting.util.FakeHttpServletResponse;
- import org.directwebremoting.util.LocalUtil;
- import org.directwebremoting.util.Logger;
- import org.apache.struts2.ServletActionContext;
- import org.apache.struts2.dispatcher.Dispatcher;
- import org.apache.struts2.dispatcher.mapper.ActionMapping;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.ActionProxy;
- import com.opensymphony.xwork2.ActionProxyFactory;
- import com.opensymphony.xwork2.Result;
- import com.opensymphony.xwork2.config.Configuration;
- import com.opensymphony.xwork2.config.ConfigurationException;
- import com.opensymphony.xwork2.util.OgnlValueStack;
- /**
- * This class represents the entry point to all WebWork action invocations. It identifies the
- * action to be invoked, prepares the action invocation context and finally wraps the
- * result.
- * You can configure an
IDWRActionProcessorthrough a context-wide initialization parameter - *
dwrActionProcessorthat whose methods will be invoked around action invocation. - *
- * @author
- */
- public class DWRAction
- {
- /**
- * The log stream
- */
- private static final Logger log = Logger.getLogger(DWRAction.class);
- private static final String DWRACTIONPROCESSOR_INIT_PARAM = "dwrActionProcessor";
- private static DWRAction s_instance;
- private Dispatcher m_wwDispatcher;
- private IDWRActionProcessor m_actionProcessor;
- @SuppressWarnings("unchecked")
- private DWRAction(ServletContext servletContext) throws ServletException
- {
- // Dispatcher.initialize(servletContext);
- m_wwDispatcher = Dispatcher.getInstance();
- if(m_wwDispatcher==null)
- {
- m_wwDispatcher = new Dispatcher(servletContext, new HashMap());
- m_wwDispatcher.init();
- Dispatcher.setInstance(m_wwDispatcher);
- }
- m_actionProcessor = loadActionProcessor(servletContext.getInitParameter (DWRACTIONPROCESSOR_INIT_PARAM));
- }
- /**
- * Entry point for all action invocations.
- *
- * @param actionDefinition the identification information for the action
- * @param params action invocation parameters
- * @param request original request
- * @param response original response
- * @param servletContext current
ServletContext - * @return an
AjaxResultwrapping invocation result - *
- * @throws ServletException thrown if the initialization or invocation of the action fails
- */
- public static AjaxResult execute(ActionDefinition actionDefinition, Map params, HttpServletRequest request, HttpServletResponse response, ServletContext servletContext) throws ServletException
- {
- initialize(servletContext);
- return s_instance.doExecute(actionDefinition, params, request, response, servletContext);
- }
- protected AjaxResult doExecute(ActionDefinition actionDefinition, Map params, HttpServletRequest request, HttpServletResponse response, ServletContext servletContext) throws ServletException
- {
- FakeHttpServletResponse actionResponse = new FakeHttpServletResponse();
- if (null != m_actionProcessor)
- {
- m_actionProcessor.preProcess(request, response, actionResponse, params);
- }
- m_wwDispatcher.prepare(request, actionResponse);
- ActionInvocation invocation = invokeAction(m_wwDispatcher, request, actionResponse, servletContext, actionDefinition, params);
- AjaxResult result = null;
- if (actionDefinition.isExecuteResult())
- {
- // HINT: we have output string
- result = getTextResult(actionResponse);
- }
- else
- {
- result = new DefaultAjaxDataResult(invocation.getAction());
- }
- if (null != m_actionProcessor)
- {
- m_actionProcessor.postProcess(request, response, actionResponse, result);
- }
- return result;
- }
- @SuppressWarnings("unchecked")
- protected ActionInvocation invokeAction(Dispatcher du, HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionDefinition actionDefinition, Map params) throws ServletException
- {
- ActionMapping mapping = getActionMapping(actionDefinition, params);
- Map extraContext = du.createContextMap(request, response, mapping, context);
- // If there was a previous value stack, then create a new copy and pass it in to be used by the new Action
- OgnlValueStack stack = (OgnlValueStack) request.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);
- if (null != stack)
- {
- extraContext.put(ActionContext.VALUE_STACK, new OgnlValueStack(stack));
- }
- try
- {
- prepareContinuationAction(request, extraContext);
- Configuration config = du.getConfigurationManager().getConfiguration();
- ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
- mapping.getNamespace(), mapping.getName(), extraContext, actionDefinition.isExecuteResult(), false); proxy.setMethod(actionDefinition.getMethod());
- request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, proxy.getInvocation().getStack());
- // if the ActionMapping says to go straight to a result, do it!
- if (mapping.getResult() != null)
- {
- Result result = mapping.getResult();
- result.execute(proxy.getInvocation());
- }
- else
- {
- proxy.execute();
- }
- return proxy.getInvocation();
- }
- catch (ConfigurationException ce)
- {
- throw new ServletException("Cannot invoke action '" + actionDefinition.getAction() + "' in namespace '" + actionDefinition.getNamespace() + "'", ce);
- }
- catch (Exception e)
- {
- throw new ServletException("Cannot invoke action '" + actionDefinition.getAction() + "' in namespace '" + actionDefinition.getNamespace() + "'", e);
- }
- finally
- {
- // If there was a previous value stack then set it back onto the request
- if (null != stack)
- {
- request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
- }
- }
- }
- protected void prepareContinuationAction(HttpServletRequest request, Map extraContext)
- {
- // String id = request.getParameter(XWorkContinuationConfig.CONTINUE_PARAM);
- // if (null != id)
- // {
- // // remove the continue key from the params - we don't want to bother setting
- // // on the value stack since we know it won't work. Besides, this breaks devMode!
- // Map params = (Map) extraContext.get(ActionContext.PARAMETERS);
- // params.remove(XWorkContinuationConfig.CONTINUE_PARAM);
- //
- // // and now put the key in the context to be picked up later by XWork
- // extraContext.put(XWorkContinuationConfig.CONTINUE_KEY, id);
- // }
- }
- protected ActionMapping getActionMapping(ActionDefinition actionDefinition, Map params)
- {
- ActionMapping actionMapping = new ActionMapping(actionDefinition.getAction(), actionDefinition.getNamespace(), actionDefinition.getMethod(), params);
- return actionMapping;
- }
- protected AjaxTextResult getTextResult(FakeHttpServletResponse response)
- {
- DefaultAjaxTextResult result = new DefaultAjaxTextResult();
- String text = null;
- try
- {
- text = response.getContentAsString();
- }
- catch (UnsupportedEncodingException uee)
- {
- log.warn("Cannot retrieve text output as string", uee);
- }
- if (null == text)
- {
- try
- {
- text = response.getCharacterEncoding() != null ? new String(response.getContentAsByteArray(), response.getCharacterEncoding()) : new String(response.getContentAsByteArray());
- }
- catch (UnsupportedEncodingException uee)
- {
- log.warn("Cannot retrieve text output as encoded byte array", uee);
- text = new String(response.getContentAsByteArray());
- }
- }
- result.setText(text);
- return result;
- }
- /**
- * Performs the one time initialization of the singleton
DWRAction. - *
- * @param servletContext
- * @throws ServletException thrown in case the singleton initialization fails
- */
- private static void initialize(ServletContext servletContext) throws ServletException
- {
- synchronized(DWRAction.class)
- {
- if (null == s_instance)
- {
- s_instance = new DWRAction(servletContext);
- }
- }
- }
- /**
- * Tries to instantiate an
IDWRActionProcessorif defined in web.xml. - *
- * @param actionProcessorClassName
- * @return an instance of
IDWRActionProcessorif the init-param is defined ornull - * @throws ServletException thrown if the
IDWRActionProcessorcannot be loaded and instantiated - */
- private static IDWRActionProcessor loadActionProcessor(String actionProcessorClassName) throws ServletException
- {
- if (null == actionProcessorClassName || "".equals(actionProcessorClassName))
- {
- return null;
- }
- try
- {
- Class actionProcessorClass = LocalUtil.classForName(actionProcessorClassName);
- return (IDWRActionProcessor) actionProcessorClass.newInstance();
- }
- catch(ClassNotFoundException cnfe)
- {
- throw new ServletException("Cannot load DWRActionProcessor class '" + actionProcessorClassName + "'", cnfe);
- }
- catch(IllegalAccessException iae)
- {
- throw new ServletException("Cannot instantiate DWRActionProcessor class '" + actionProcessorClassName + "'. Default constructor is not visible", iae);
- }
- catch(InstantiationException ie)
- {
- throw new ServletException("Cannot instantiate DWRActionProcessor class '" + actionProcessorClassName + "'. No default constructor found", ie);
- }
- catch(Throwable cause)
- {
- throw new ServletException("Cannot instantiate DWRActionProcessor class '" + actionProcessorClassName + "'", cause);
- }
- }
- }
评论
Clayz
2008-03-13
留个记号先
kkbear
2007-10-12
try this:
DWRActionUtil.execute({
namespace:'/ajax',
action:'TestJS!doSomething',
executeResult:'true'
}, 'data', doOnJSResult, "stream...");
jiangcccc
2007-10-11
你改的这个可以用么?兄弟
为什么我只能调用action的execute方法,调用其他的方法就报错了?
DWRActionUtil.execute({
namespace:'/ajax',
action:'TestJS',
method:'doSomething',
executeResult:'true'
}, 'data', doOnJSResult, "stream...");
只要加上method:'doSomething'就会报找不到action
为什么我只能调用action的execute方法,调用其他的方法就报错了?
DWRActionUtil.execute({
namespace:'/ajax',
action:'TestJS',
method:'doSomething',
executeResult:'true'
}, 'data', doOnJSResult, "stream...");
只要加上method:'doSomething'就会报找不到action
kkbear
2007-09-30
Hi,I think u used the wrong method.
Not DWRUtil, but is DWRActionUtil.
So copy DWRActionUtil.js from package "org.directwebremoting.webwork" of DWR 2.0 Source to ur js dir.
And modify the method called:
Not DWRUtil, but is DWRActionUtil.
So copy DWRActionUtil.js from package "org.directwebremoting.webwork" of DWR 2.0 Source to ur js dir.
<script type='text/javascript' src='<%=path%>/'your js dir'/DWRActionUtil.js'></script> <script type='text/javascript' src='<%=path%>/dwr/interface/DwrBean.js'></script> <script type='text/javascript' src='<%=path%>/dwr/interface/DWRAction.js'></script> <script type='text/javascript' src='<%=path%>/dwr/engine.js'></script> <script type='text/javascript' src='<%=path%>/dwr/util.js'></script>
And modify the method called:
function checkuser(){
DWRActionUtil.execute({namespace:'/sys', action:'login', executeResult:'true'}, 'form1', writePage);
}
iceheartboy
2007-09-29
哥们,我按照你的做法,没有成功啊!
我的dwr.xml
<create creator="none" javascript="DWRAction">
<param name="class"
value="org.directwebremoting.struts2.DWRAction" />
<include method="execute" />
</create>
<convert converter="bean"
match="org.directwebremoting.struts2.ActionDefinition">
<param name="include"
value="namespace,action,method,executeResult" />
</convert>
<convert converter="bean"
match="org.directwebremoting.webwork.AjaxResult" />
<convert converter="bean"
match="action.bywangchb.Login" />
我的web.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<!--
<display-name>DWR Servlet</display-name>
-->
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>exposeInternals</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
我的jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type='text/javascript' src='<%=path%>/dwr/interface/DwrBean.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/interface/DWRAction.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/util.js'></script>
<title>Struts 2</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<script language="javascript">
//function checkuser(){
// DWRAction.execute('/sys/login', 'form1', 'writePage');
//}
function checkuser(){
DWRAction.execute({namespace:'/sys', action:'login', executeResult:'true'}, 'form1', writePage);
}
function writePage(msg){
DWRUtil.setValue('person_ls', msg);
}
</script>
<body>
<form method="post" name="form1" action="" id="form1">
<p align="center">用户名:<input type="text" name="name" id="name"></p>
<p align="center">密 码:<input type="password" name="pass" id="password"></p>
<p> </p>
<p align="center"><input type="button" value="登陆" onclick="checkuser()"></p>
<div id="result"></div>
<div id="person_ls"></div>
</form>
</body>
</html>
里面两种 调用action的方法都报错
Missing I18N string: MapConverter.FormatError. Params: [{]
郁闷 有时间能帮忙看看么?大侠
我的dwr.xml
<create creator="none" javascript="DWRAction">
<param name="class"
value="org.directwebremoting.struts2.DWRAction" />
<include method="execute" />
</create>
<convert converter="bean"
match="org.directwebremoting.struts2.ActionDefinition">
<param name="include"
value="namespace,action,method,executeResult" />
</convert>
<convert converter="bean"
match="org.directwebremoting.webwork.AjaxResult" />
<convert converter="bean"
match="action.bywangchb.Login" />
我的web.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<!--
<display-name>DWR Servlet</display-name>
-->
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>exposeInternals</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
我的jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type='text/javascript' src='<%=path%>/dwr/interface/DwrBean.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/interface/DWRAction.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/util.js'></script>
<title>Struts 2</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<script language="javascript">
//function checkuser(){
// DWRAction.execute('/sys/login', 'form1', 'writePage');
//}
function checkuser(){
DWRAction.execute({namespace:'/sys', action:'login', executeResult:'true'}, 'form1', writePage);
}
function writePage(msg){
DWRUtil.setValue('person_ls', msg);
}
</script>
<body>
<form method="post" name="form1" action="" id="form1">
<p align="center">用户名:<input type="text" name="name" id="name"></p>
<p align="center">密 码:<input type="password" name="pass" id="password"></p>
<p> </p>
<p align="center"><input type="button" value="登陆" onclick="checkuser()"></p>
<div id="result"></div>
<div id="person_ls"></div>
</form>
</body>
</html>
里面两种 调用action的方法都报错
Missing I18N string: MapConverter.FormatError. Params: [{]
郁闷 有时间能帮忙看看么?大侠
发表评论
- 浏览: 4879 次
- 性别:

- 来自: 深圳

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
dwr integration with str ...
留个记号先
-- by Clayz -
[EXT Develop Log]--combo ...
THX very much
-- by mandle -
struts2 JSON Plugin
To 402king:I'm sorry, what does "sumbit ...
-- by kkbear -
struts2 JSON Plugin
Hi,I hadn't so long in Json,I had a ques ...
-- by 402king -
dwr integration with str ...
try this: DWRActionUtil.execute({ n ...
-- by kkbear






评论排行榜