En el ejemplo siguiente se muestra el método actionPerformed() de OrderDetailPortlet.java en la aplicación Portlets de cooperación de ejemplo de Sample Gallery (Galería de ejemplos). El portlet pasa el parámetro TRACKING_ID al intermediario de propiedad en su método actionPerformed(). Este parámetro corresponde a un parámetro de salida en el apartado de enlace del archivo WSDL del portlet ( OrderDetail.wsdl, en este ejemplo).
OrderDetailPortlet.java
OrderDetailPortlet.java
...
private static final String PREFIX = ""; //$NON-NLS-1$
public static final String ACTION_NAME = PREFIX + "actionName"; //$NON-NLS-1$
public static final String ORDER_DETAILS = PREFIX + "orderDetails"; //$NON-NLS-1$
public static final String ORDER_ID_ENTRY = PREFIX + "orderIdEntry"; //$NON-NLS-1$
public static final String ORDER_ID = PREFIX + "orderId"; //$NON-NLS-1$
public static final String ORDER_DETAIL_BEAN = PREFIX + "orderDetailBean"; //$NON-NLS-1$
public static final String ORDER_DETAIL = PREFIX + "orderDetail"; //$NON-NLS-1$
public static final String TRACKING_ID = PREFIX + "trackingId"; //$NON-NLS-1$
...
public void actionPerformed(ActionEvent event) {
String actionName = event.getActionString(); PortletRequest request = event.getRequest(); //Una acción provoca que se modifique el estado
ShippingUtils.setLastModified(request); if (getPortletLog().isDebugEnabled()) {
getPortletLog().debug(Messages.getString("OrderDetailPortlet_action_entry")); //$NON-NLS-1$
} if (actionName.equals(ORDER_DETAILS)) {
request.getPortletSession().setAttribute(
ACTION_NAME,
ORDER_DETAILS);
request.getPortletSession().setAttribute(
ORDER_ID,
request.getParameter(ORDER_ID)); /*
* Esto se hace ya que el ID de seguimiento (tracking id) es un parámetro de salida del archivo C2A WSDL
* El "tracking id" se escribe en la petición, de forma que el intermediario
* puede publicarlo en el mismo ciclo de suceso
*/
OrderDetail od = ShippingDB.getOrderDetail(request.getParameter(ORDER_ID));
request.getPortletSession().setAttribute(ORDER_DETAIL, od);
request.setAttribute(TRACKING_ID, od.getTrackingId());
} else if (actionName.equals(ORDER_ID_ENTRY)) {
request.getPortletSession().setAttribute(
ACTION_NAME, ORDER_ID_ENTRY);
}
}
...
OrderDetail.wsdl (el intermediario de propiedad recibe el parámetro "tracking ID" que le envía el atributo de petición.)
...
<binding
name="OrderDetailBinding"
type="tns:OrderDetail_Service">
<portlet:binding></portlet:binding>
<operation name="order_Detail">
<portlet:action name="orderDetails" type="simple" caption="Order.Details" description="Get.details.for.specified.order.id"/>
<input>
<portlet:param name="orderId" partname="order_Id" caption="order.id"/>
</input>
<output>
<portlet:param name="trackingId" partname="tracking_Id" boundTo="request-attribute" caption="tracking.id"/>
</output>
</operation>
</binding>
...