我在this article中读到,如果我们有2个portlet,则都会呈现一个jsp,其中一个文本框名称为userName
。当我们在其中一个portlet的文本框中输入“test”时,如果我们在doView
方法中有这样的内容:
String userName = request.getParameter("UserName");
然后两个portlet的userName
都将进行值测试。
我知道当我们将processAction作为post方法调用时,将调用门户页面中所有portlet的doView
方法。
出于某种原因,这不会发生在我身上,因为两个portlet的userName
都没有值“test”。只有调用post方法的那个具有值“test”。
我正在使用IBM Websphere portal 8.0
<FORM method="GET" action="<%=renderResponse.createRenderURL()%>">
<INPUT name="<%=QuickSearchPortlet.FORM_TEXT%>" type="text"/>
User Name: <input type="text" name="UserName"/>
<INPUT name="<%=QuickSearchPortlet.FORM_SUBMIT%>" type="submit" value="Submit"/>
<input type="file" name="imageFile">
</FORM>.
多个portlet的doView()方法:String userName = request.getParameter(“UserName”);
答案 0 :(得分:0)
根据portlet规范,您需要执行以下操作:
Map userInfo = (Map) request.getAttribute(PortletRequest.USER_INFO);
String givenName = (userInfo!=null)
15 ? (String)
userInfo.get(PortletRequest.P3PUserInfos.USER_NAME_GIVEN) : “”;
String lastName = (userInfo!=null)
? (String)
userInfo.get(PortletRequest.P3PUserInfos.USER_NAME_FAMILY) : “”;
答案 1 :(得分:0)
您的代码将其视为
request.getParameter("UserName");
这意味着它是您每次都要提交的请求的一部分。您要提交的请求是针对要为其调用操作方法的portlet。其他portlet只是调用doView方法。如果其他portlet也将userName称为request.getParameter("UserName");
,那么很明显,该值未提交给它们。
如果您希望在portlet之间使用用户名,则必须进行portlet间通信,或者如果在其他portlet中的值相同,则在会话中共享该属性。另外,您是否尝试调试其他portlet的doView()方法以查看它们是否被调用?
答案 2 :(得分:0)
萨钦,
如果我理解你正确,你试图调用portlet的processAction,并期望参数在所有portlet的doView中可用?
如果要提交processAction(在表单操作中使用actionURL),则只会调用目标portlet的processAction。然后门户网站容器调用所有portlet的doView。 调用doViews时,参数不会从processAction传输到doView。所以你不会在任何doViews中看到参数。
编辑:如果你从表单提交doView(在表单操作中使用renderURL) - 我将不得不测试这个场景将在下周试用。
注意:通常您不提交表单来呈现阶段,因为您不应该在reder阶段更改portlet状态。 - refer to this also
请提供您的jsp表单代码和portlet控制器代码,以便为您提供更准确的答案。