dram.me

OFBiz中的noConditionFind

在OFBiz中,有一个交互设计非常不友好,就是打开大部分页面,表格默认不会显示数据,需要手动点击查询才能够看到结果。

但有几个页面是例外,例如/partymgr/control/findVisits的访问日志页面,点击之后直接就显示结果了。那是怎么实现的呢?是在screen定义中添加了noConditionFind参数。

具体的代码实现如下:

<screen name="FindVisits">
    <section>
        <actions>
            <set field="headerItem" value="visits"/>
            <set field="titleProperty" value="PageTitleVisitList"/>
            <set field="noConditionFind" value="Y"/>
        </actions>
    </section>
</screen>

noConditionFind的作用是在渲染页面的时候,如果没有向数据服务提供任何查询条件,数据服务会作为无查询条件处理来返回数据。而如果不指定这一参数,OFBiz会直接不做查询。

这是noConditionFind第一个应用的地方。

而另一用处,可以在controller的定义中,重定向页面时作为参数,跳转到查询页面时,使其显示左右查询结果,如:

<request-map uri="createWorkEffort">
    <security https="true" auth="true"/>
    <event type="service" invoke="createWorkEffort"/>
    <response name="success" type="request-redirect" value="FindWorkEffort">
      <redirect-parameter name="noConditionFind"/>
    </response>
    <response name="error" type="view" value="EditWorkEffort"/>
</request-map>

有一个细节,由于重定向前表单中已经包含了noConditionFind变量,所以这里就不需要指定值了。

再一用处,可以在菜单项中,直接追加noConditionFind参数,例如:

<menu-item name="workeffort" title="${uiLabelMap.WorkEffortWorkEffort}">
  <link target="FindWorkEffort">
    <parameter param-name="noConditionFind" value="Y"/>
  </link>
</menu-item>