在开始之前,必须先完成练习 1.4:创建用于创建和更新用户信息的页面。
在本练习中,通过使用“单击激活操作”机制来将数据从源 portlet 发送至目标 portlet,您将创建更多提供协作行为的 portlet。源 portlet(ListingSearch)使用会话 bean 来访问拍卖商品数据。在使用 ListingSearch portlet 找到特定列表之后,目标 ListingDetail portlet 将显示有关通过搜索找到的商品的详细信息。在每种情况下,都必须首先创建 portlet。
要创建 ListingSearch portlet,遵循下列步骤:
ListingSearchView.jsp 将在编辑窗格中打开。
在 Page Designer 中打开 ListingSearchView.jsp 文件之后,遵循下列步骤来将会话 bean 数据添加为 ListingSearch 页面的数据源:
在此部分练习中,将添加 Java 页面代码以完成下列任务:
可以使用下列步骤来添加 EJB 引用逻辑和代码,以便将调用和结果绑定至用户界面:
public String doListingFacadeLocalFindByTitleAction() { String title = getListingFacadeLocalFindByTitleParamBean().getTitle(); getSessionScope().put("title", title); try { listingFacadeLocalFindByTitleResultBean = getListingFacadeLocal().findByTitle(title); } catch (Exception e) { logException(e); } return null; }
public ListingFacadeLocalFindByTitleParamBean getListingFacadeLocalFindByTitleParamBean() { if (listingFacadeLocalFindByTitleParamBean == null) { listingFacadeLocalFindByTitleParamBean = new ListingFacadeLocalFindByTitleParamBean(); String title = (String)getSessionScope().get("title"); listingFacadeLocalFindByTitleParamBean.setTitle(title); } return listingFacadeLocalFindByTitleParamBean; }
public ItemData[] getListingFacadeLocalFindByTitleResultBean() { if (listingFacadeLocalFindByTitleResultBean == null) { String title = (String)getSessionScope().get("title"); if (title != null) { try { listingFacadeLocalFindByTitleResultBean = getListingFacadeLocal().findByTitle(title); } catch (Exception e) { logException(e); } } } return listingFacadeLocalFindByTitleResultBean; }
要创建 ListingDetail portlet,遵循下列步骤:
ListingDetailView.jsp 文件将在编辑窗格中打开。
在 Page Designer 中打开了 ListingDetailView.jsp 文件之后,遵循下列步骤来将会话 bean 数据添加为 ListingDetail 页面的数据源:
在此部分练习中,将添加 Java 页面代码以完成下列任务:
可以使用下列步骤来添加 EJB 引用逻辑和代码,以便将调用和结果绑定至用户界面:
public String doListingFacadeLocalFindByIdAction() { Integer itemid = getListingFacadeLocalFindByIdParamBean().getItemid(); getSessionScope().put("itemid", itemid); try { listingFacadeLocalFindByIdResultBean = getListingFacadeLocal().findById(itemid); } catch (Exception e) { logException(e); } return null; }
public ListingFacadeLocalFindByIdParamBean getListingFacadeLocalFindByIdParamBean() { if (listingFacadeLocalFindByIdParamBean == null) { listingFacadeLocalFindByIdParamBean = new ListingFacadeLocalFindByIdParamBean(); Integer itemid = (Integer)getSessionScope().get("itemid"); listingFacadeLocalFindByIdParamBean.setItemid(itemid); } return listingFacadeLocalFindByIdParamBean; }
public ItemData getListingFacadeLocalFindByIdResultBean() { if (listingFacadeLocalFindByIdResultBean == null) { Integer itemid = (Integer)getSessionScope().get("itemid"); if (itemid != null) { try { listingFacadeLocalFindByIdResultBean = getListingFacadeLocal().findById(itemid); } catch (Exception e) { logException(e); } } } return listingFacadeLocalFindByIdResultBean; }
协作 portlet 这一术语指的是页面上各个 portlet 通过共享信息来互相交互的能力。门户网站页面上的一个或多个协作 portlet 可以自动对源 portlet 中操作或事件所触发的源 portlet 中的更改作出反应。作为事件目标的 Portlet 可以作出反应,这样将不需要用户在该页面上的其它 portlet 中进行重复更改或操作。用来实现协作行为的机制称为“单击激活操作”事件。
可以从源 portlet 上的图标启动“单击激活操作”事件。该图标表示包含一列操作目标的弹出菜单。在用户选择一个特定目标之后,属性代理将用相应的 portlet 操作将数据传递至目标。使用“单击激活操作”传递方法,用户只需进行单击就可以将数据从源 portlet 传送至一个或多个目标 portlet,从而导致目标对该操作作出反应并显示带有结果的新视图。
执行下列步骤来设置 ListingSearch 与 ListingDetail 这两个 portlet 之间的协作行为:
注意:务必将“单击激活操作”输出属性对象放在输出字段上面,既不要放在该字段前面,也不要放在它后面。输出字段应该在一个矩形框中突出显示,并且看起来类似于以下内容:
。
(可能需要将对话框移到旁边,以便查看输出字段选择。)
<h:outputText id="text3" value="#{varlistingFacadeLocalFindByTitleResultBean.itemid}" styleClass="outputText"> <f:convertNumber /> </h:outputText> <c2a:encodeProperty type="itemid" namespace="http://auctionportlet" name="itemid" value="#{varlistingFacadeLocalFindByTitleResultBean.itemid}"> </c2a:encodeProperty>记下突出显示的 value 属性。如果尚未正确地将“输出属性”添加至页面,则此属性将丢失。
这些步骤将 ListingSearch 标识为源 portlet。接下来,必须将 ListingDetail 作为目标 portlet 来启用:
要验证已经正确标识了“单击激活操作”源,返回至“项目资源管理器”中的“Portlet 部署描述符”文件夹。用来表示源 portlet(ListingSearch)和目标 portlet(ListingDetails)的图标看起来应该为如下所示:
要验证 ListingSearch 和 ListingDetail portlet 在按预期工作,就应该在测试环境中运行它们。
要运行这些 portlet,执行下列步骤:
在进行下一个练习之前,应停止测试环境服务器。要停止测试环境服务器,只需在“服务器”视图中选择它,然后单击停止服务器工具栏按钮 。
现在,您可以开始进行练习 2.1:创建新的门户网站以显示 portlet 应用程序了。