使用业务流程编排器资源管理器的“消息”组件来在 JavaServer Faces(JSF)应用程序中显示数据对象和基本类型。
如果消息类型是基本类型,则将显示标注和输入字段。如果消息类型是数据对象,“消息”组件就会对该对象进行遍历并显示该对象中的元素。
在 <h:form> 标记中添加 bpe:form 标记。bpe:form 标记必须包含 model 属性。
以下示例说明如何添加“消息”组件。
<h:form> <h:outputText value="Input Message" /> <bpe:form model="#{MyHandler.inputMessage}" readOnly="true" /> <h:outputText value="Output Message" /> <bpe:form model="#{MyHandler.outputMessage}" /> </h:form>
“消息”组件的 model 属性引用了 com.ibm.bpc.clientcore.MessageWrapper 对象。此包装器对象包装了服务数据对象(SDO)对象或 Java™ 基本类型(例如 int 或 boolean)。在本示例中,消息是由名为 MyHandler 的受管 Bean 的属性提供的。
以下示例说明如何在配置文件中添加 MyHandler 受管 Bean。
<managed-bean> <managed-bean-name>MyHandler</managed-bean-name> <managed-bean-class>com.ibm.bpe.sample.jsf.MyHandler</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>type</property-name> <value>com.ibm.task.clientmodel.bean.TaskInstanceBean</value> </managed-property> </managed-bean>
以下示例说明如何实现输入消息和输出消息。
public class MyHandler implements ItemListener { private TaskInstanceBean taskBean; private MessageWrapper inputMessage, outputMessage /* Listener method, e.g. when a task instance was selected in a list handler. * Ensure that the handler is registered in the faces-config.xml or manually. */ public void itemChanged(Object item) { if( item instanceof TaskInstanceBean ) { taskBean = (TaskInstanceBean) item ; } } /* Get the input message wrapper */ public MessageWrapper getInputMessage() { try{ inputMessage = taskBean.getInputMessageWrapper() ; } catch( Exception e ) { ; //...ignore errors for simplicity } return inputMessage; } /* Get the output message wrapper */ public MessageWrapper getOutputMessage() { // Retrieve the message from the bean. If there is no message, create // one if the task has been claimed by the user. Ensure that only // potential owners or owners can manipulate the output message. try{ outputMessage = taskBean.getOutputMessageWrapper(); if( outputMessage == null && taskBean.getState() == TaskInstanceBean.STATE_CLAIMED ) { HumanTaskManagerService htm = getHumanTaskManagerService(); outputMessage = new MessageWrapperImpl(); outputMessage.setMessage( htm.createOutputMessage( taskBean.getID() ).getObject() ); } } catch( Exception e ) { ; //...ignore errors for simplicity } return outputMessage } }
MyHandler 受管 Bean 实现了 com.ibm.jsf.handler.ItemListener 接口,因此,它可以将其本身注册为列表处理程序的项侦听器。当用户单击列表中的项时,MyHandler Bean 在它的 itemChanged( Object item ) 方法中将接收到有关所选项的通知。处理程序将检查项类型,然后存储对相关 TaskInstanceBean 对象的引用。要使用此接口,请在 faces-config.xml 文件中添加相应列表处理程序的条目。
MyHandler Bean 提供了 getInputMessage 和 getOutputMessage 方法。这两个方法都返回 MessageWrapper 对象。这些方法把调用委托给所引用的任务实例 Bean 进行。例如,如果由于未设置消息而导致任务实例 Bean 返回空,该处理程序就会创建并存储新的空消息。“消息”组件将显示 MyHandler Bean 提供的消息。