论坛首页 Java企业应用论坛

WebWork Portlet

浏览 5482 次
锁定老帖子 主题:WebWork Portlet
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-11-10  
准确说应该是xWork Porlet。所有的Java代码和xWork相关的配置文件见附件。

在这个Portlet里面使用的xWork Action:

public class HelloAction implements Action {
	private String _userName;
	public void setUserName(String name); {
		_userName = name;
	}
	public String getUserName(); {
		return _userName;
	}
	public String execute(); throws Exception {
		return SUCCESS;
	}
}


可以看到,跟WebWork里面的用法完全一样。作为view的JSP如下:

<%@page contentType="text/html;CHARSET=utf8" %> 
<%@ taglib uri="webwork" prefix="ww" %>
Hello!
<ww:property value="userName" />


跟WebWork的情况也差不多。我改写了<ww:property>标签,在附件中可以找到改写后的PropertyTag。另外缺省的DispatcherResult也改写过了,在webwork-default.xml里面需要声明一下:

<xwork>
    <package name="webwork-default">
        <result-types>
            <result-type name="dispatcher" class="com.jbbis.portlets.xwork.PortletDispatcherResult" default="true"/>
        </result-types>


这里的关键是,action类是完全不需要改变的,虽然环境从Servlet换到了Portlet。这就是JavaBean-based framework的好处。
   发表时间:2004-11-10  
好,我正在愁<ww:property>标签不能用了。

不过WebWorkPortlet有一个小错误哦,result.put(key, result);应该是result.put(key, value);
private Map getSessionMap(PortletRequest request); {
		Enumeration attNames = request.getPortletSession();.getAttributeNames();;
		Map result = new HashMap();;
		while(attNames.hasMoreElements();); {
			String key = (String); attNames.nextElement();;
			Object value = request.getPortletSession();.getAttribute(key);;
			result.put(key, result);;
		}
		return result;
	}


而且在WebWork2.1后面版本中,WebWorkStatics.COMPONENT_MANAGER改为
ComponentInterceptor.COMPONENT_MANAGER。


我又加了一个PortletActionContext,解决Application scope Seesion的问题。
import java.util.Map;

import javax.portlet.PortletContext;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletSession;

import com.opensymphony.xwork.ActionContext;

/**
 * @author moxie
 *         achqian@yahoo.con.cn
 */
public class PortletActionContext extends ActionContext implements WebWorkPortletStatics{

	/**
	 * @param context
	 */
	public PortletActionContext(Map context); {
		super(context);;
	}
	
	public static PortletRequest getPortletRequest();{
		return (PortletRequest);ActionContext.getContext();.get(PORTLET_REQUEST);;
	}
	
	public static PortletResponse getPortletResponse();{
		return (PortletResponse);ActionContext.getContext();.get(PORTLET_RESPONSE);;
	}
	
	public static PortletContext getPortletContext();{
		return (PortletContext);ActionContext.getContext();.get(PORTLET_CONTEXT);;
	}

	public static Map getApplicationContextScopeSession();{
		return (Map);ActionContext.getContext();.get(APPLICATION_SCOPE_SESSION);;
	}
	
	public static PortletSession getPortletSession();{
		return getPortletRequest();.getPortletSession();;
	}
}
0 请登录后投票
   发表时间:2004-11-11  
呵呵,谢谢两位热心人!
充分想象+无限扩展=体念webwork乐趣
0 请登录后投票
   发表时间:2004-11-12  
这种方法不错,如果是struts的话移植就麻烦了
0 请登录后投票
   发表时间:2005-03-27  
好像bea他们的portal都支持stuts的直接发布啊?麻烦么?有谁给我解释一下?
0 请登录后投票
   发表时间:2005-03-27  
WebWork 的 Action 没有使用  Http request, 和 http response作为参数。
移植起来比  使用了 Http request, 和 http response作为参数 的 action 容易一些。

不过,我想问几个更深入的问题。
1. 假如 webwork action 使用了 http request (比如通过request aware, 或者 thread local),

2. 以前的 webwork action 的 config,还管用吗? 比如, url -&gt; action的配置, 一些 redirect result 的 配置。

3. 以前的 action 之间的复杂交互,也许涉及到 session 的公用 Object,

这几种情况下, 移植的方法 还是一样吗? 还是需要做更多的工作 ?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics