在我的上一篇博客JBPM外接任务表单简述上,我提到过“使用第三方的UIComponent以及定义自己的UIComponent(来满足一些国内的BT需求)将不是什么难事。”
接下来的日子,我就尝试着将tomahawk加入进去,结果是未遂 -_-!!!。image和javacript总是没有被创建成一个URL对象,原因嘛我也不知道,对JSF还是一只半解,也没有时间去阅读tomahawk的代码。好在提供JSF UIComponents还是有那么几家,于是我又试了一下jsf-ri-sandbox-0.9,结果一次就OK了。
下面说下环境:
- JBPM 3.2.1
- jsf-ri-sandbox-0.9 地址
- tomcat 6.0.13 (你当然可以继续用JBOSS,不过如果你打算换TOMCAT,你可以去JBOSS wiki上找到你想要的东西)
- RP (这个不用多解释了,hehe )
开始上课了:
- 由于jsf-ri-sandbox-0.9.jar里带了一个sandbox.taglib.xml文件,我们就不用自己创建它然后在web.xml里导入了。所以第一步很容易,直接把jsf-ri-sandbox-0.9.jar放到jbpm-console\WEB-INF\lib。还有一个叫shale-remoting-1.1.0-SNAPSHOT.jar也要放进去。
- 新建一个Process Definition--->新建一个task--->在TASK属性编辑器里选择Generate Form-->add一个Name为date的变量-->OK。(这一步我省略了很多,不太明白的先看看基础资料)
- 完成上步后,可以在你的工程里看到多了2个文件:form.xml 、****.xhtml。form.xml是做什么的,我在这里不想多说,大家看看文件内容也就明白了,不明白的可以看看我上篇博客(好象有讲到)。接着我们编辑那个 .xhtml文件:
在文件上加入xmlns:risb=http://java.sun.com/jsf/ri/sandbox,如下:
- xmlns:tf="http://jbpm.org/jsf/tf"
- xmlns:jbpm="http://jbpm.org/jsf"
- xmlns:risb="http://java.sun.com/jsf/ri/sandbox">
找到 h:inputText value="#{var['date']}" 替换成 risb:calendar value="#{var['date']}" 换后如下:
xml 代码
- <jbpm:datacell>
- <f:facet name="header">
- <h:outputText value="date"/>
- f:facet>
- <risb:calendar value="#{var['date']}" />
- jbpm:datacell>
到这里就完成了,赶快发布测试吧。 GOOD LUCK~~~~
成功后如下图:
后记:
-
我只验证了 risb:calendar 是否能使用,required、validator等其他attribute还没有验证过,无论如何我想先把基本功能跑通。
-
jsf-ri-sandbox也提供了其他的UIComponents,不过就本人“目测”,他们并不适合使用在TaskForm中。这也是为什么我一直贼心不死,想把Tomahawk融合进来的原因。另外好象还有一个叫icefaces的东东,有兴趣的可以试验下,成功后请和他人分享。造福大众,功德无量!
我接下来的计划:
- 我还会尝试写一个Custom UIComponent,它将是和JBPM业务相结合的,就是说是JBPM专用的。
- 由于很多人对JSF或者说Facelets不感兴趣,我想做一个用.jsp直接挂接的例子。不过本人时间有限,毕业论文还没写,这个只有50%可能会完成。