论坛首页 Java版 Webwork

再次提出Portal action问题

浏览 2404 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2004-12-23
这次的问题是这样的,在不扩展jsr168的标准下,我是否能够将某一个服务器下的某个web程序拉到另一个服务器下的portlet中,而且还能正常跑起来?

比如,我现在创建一个门户,然后将yahoo,google的首页放到我的两个窗子里。然后点击查询的时候将结果显示在这些小窗子里

我现在的方案是模仿yahoo和google的页面,设计自己的portlet。然后将请求转发到这些网站再重新显示。

可能利用iframe也能够完成

除了这些技巧,有没有标准的办法??
   
时间:2004-12-24
wsrp,这个只是听说过,没有用过
   
0 请登录后投票
时间:2004-12-24
当然可以的
看来你们才开始研究portal的
plumtree到上面去找找的,实现起来很容易的
   
0 请登录后投票
时间:2004-12-24
willmac 写道
当然可以的
看来你们才开始研究portal的
plumtree到上面去找找的,实现起来很容易的
本人比较愚钝,请willmac讲讲好么?
   
0 请登录后投票
时间:2004-12-25
咳,类似proxy的东西,什么都可以吃的
用于弱整合,不过这是我极力反对的,portal是内容管理和流程控制的容器的
是web容器的更高层次,而不是infomation hub.
多余的话,不说了,这些年说累了。
plumtree的代码贴出来,有用就拿去吧
ps:rss解决方案也类是的,不想改代码都可以用这个方案的
虽然这个代码有些suck的,也就一个思路的
嗬嗬,这个代码仅限google,自己的应用,自己写proxy的,看的时候注意
[code:1]
package com.plumtree.portlet.portlets;

import com.google.soap.search.*;
import java.io.IOException;
import java.io.PrintWriter;
import javax.portlet.*;

public class GooglePortlet extends GenericPortlet
{

private static final String SEARCH_QUERY = "searchQuery";
private static final String START_RESULT = "startResult";
public static final String KEY = "KEY";
public static final String CONTENT_TYPE_HTML = "text/html;charset=UTF-8";

public GooglePortlet()
{
}

public void processAction(ActionRequest request, ActionResponse response)
throws UnavailableException, PortletSecurityException, PortletException, IOException
{
String searchQuery = request.getParameter("searchQuery");
if(null != searchQuery)
response.setRenderParameter("searchQuery", searchQuery);
String startResult = request.getParameter("startResult");
if(null != startResult)
response.setRenderParameter("startResult", startResult);
}

protected void doHelp(RenderRequest request, RenderResponse response)
throws UnavailableException, PortletSecurityException, PortletException, IOException
{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<table>");
out.println("<tr>");
out.println("<td>");
PortletURL renderURL = response.createRenderURL();
renderURL.setPortletMode(PortletMode.VIEW);
out.println("The Google Portlet searches Google, using the specified query.<BR/> The number of results returned at a time is ten- this is a limitation of the Google API<BR/> To change the key, or adust safe search, contact your administrator.<BR/> <a href=\"" + renderURL.toString() + "\">back</a>");
out.println("</td>");
out.println("</tr>");
out.println("</form>");
out.println("</table>");
}

protected void doView(RenderRequest request, RenderResponse response)
throws UnavailableException, PortletSecurityException, PortletException, IOException
{
try
{
String searchQuery = request.getParameter("searchQuery");
String startResult = request.getParameter("startResult");
int totalResults = 0;
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String key = getInitParameter("key");
if(null == key || key.equals(""))
{
out.println("Key for search is not available. Check with your administrator to obtain the Google API Key");
return;
}
StringBuffer buff = new StringBuffer(200);
buff.append("<SCRIPT language=\"Javascript\">function openGoogleWin(href){");
buff.append("var newWin = window.open(href);");
buff.append("}</SCRIPT>");
out.print(buff.toString());
WindowState state = request.getWindowState();
WindowState otherState = null;
if(state.equals(WindowState.MAXIMIZED))
otherState = WindowState.NORMAL;
else
otherState = WindowState.MAXIMIZED;
PortletURL otherUrl = response.createRenderURL();
if(!state.equals(WindowState.MAXIMIZED))
{
otherUrl.setWindowState(otherState);
out.println("<a href=\"" + otherUrl.toString() + "\">" + otherState.toString() + "</a>");
}
GoogleSearchResult result = null;
GoogleSearchResultElement elements[] = null;
if(null != searchQuery)
{
GoogleSearch googleSearch = new GoogleSearch();
googleSearch.setKey(key);
googleSearch.setQueryString(searchQuery);
if(null != startResult)
{
int start = Integer.parseInt(startResult);
googleSearch.setStartResult(start);
}
result = googleSearch.doSearch();
elements = result.getResultElements();
}
PortletURL actionURL = response.createActionURL();
actionURL.setWindowState(state);
out.println("<table>");
out.println("<form name=\"inputForm\" target=\"_self\" method=\"POST\" action=\"" + actionURL.toString() + "\">");
out.println("<tr>");
out.println("<td>");
PortletURL renderLink = response.createRenderURL();
renderLink.setPortletMode(PortletMode.HELP);
out.println("<a href=\"" + renderLink + "\">help</a>");
out.println("</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>");
out.println("&");
out.println("</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>");
out.println("<input type=\"text\" name=\"searchQuery\" value=\"\">");
out.println("<input name=\"inputSubmit\" type=\"submit\" value=\"submit\">");
out.println("</td>");
out.println("</tr>");
out.println("</form>");
out.println("</table>");
if(null != searchQuery)
{
out.println("<table>");
out.println("<tr>");
out.println("<td>");
totalResults = result.getEstimatedTotalResultsCount();
out.println("# of results is " + totalResults);
out.println("</td>");
out.println("</tr>");
for(int i = 0; i < elements.length; i++)
{
GoogleSearchResultElement element = elements[i];
out.println("<tr>");
out.println("<td>");
out.println("<a href=\"javascript:openGoogleWin('" + element.getURL() + "');\">" + element.getTitle() + "</a>");
out.println("</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>");
out.println(element.getSummary());
out.println("</td>");
out.println("</tr>");
}

out.println("<tr>");
out.println("<td>");
out.println("&");
out.println("</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>");
out.println("&");
out.println("</td>");
out.println("</tr>");
if(totalResults > 0)
printLinks(response, out, totalResults, result.getStartIndex(), searchQuery, state);
out.println("</table>");
}
}
catch(Exception e)
{
throw new PortletException(e);
}
}

private void printLinks(RenderResponse response, PrintWriter out, int results, int currentPos, String searchQuery, WindowState windowState)
{
int total = 10;
total = results <= 100 ? results / 10 : total;
if(currentPos != 1)
currentPos = (currentPos - 1) / 10;
out.println("<tr>");
out.println("<td>");
for(int i = 1; i <= total; i++)
{
if(i == currentPos)
{
out.print(i);
} else
{
PortletURL actionURL = response.createActionURL();
try
{
actionURL.setWindowState(windowState);
}
catch(Exception e) { }
actionURL.setParameter("searchQuery", searchQuery);
actionURL.setParameter("startResult", "" + i * 10);
out.print("<a href=\"");
out.print(actionURL.toString());
out.print("\">");
out.print(i);
out.println("</a>");
}
out.print("&");
}

out.println("</td>");
out.println("</tr>");
}

static
{
SEARCH_QUERY = "searchQuery";
START_RESULT = "startResult";
KEY = "KEY";
CONTENT_TYPE_HTML = "text/html;charset=UTF-8";
}
}

[/code:1]
   
0 请登录后投票
时间:2005-04-26
占个坑
   
0 请登录后投票
时间:2005-04-30
呵呵,willmac的代码在有代理服务器的情况下就跑不动啦。还是用iframe好点。方便,省事。
   
0 请登录后投票
论坛首页 Java版 Webwork

跳转论坛:
JavaEye推荐