Opentaps Ajax 页码框架

http://www.opentaps.org/docs/index.php/Opentaps_Ajax_Pagination_Framework
jiasudu翻译。望大家指正错误,谢谢。
Opentaps Ajax 页码框架

* 1 配置Screen Widget
* 2 配置页码查询
* 3 在FTL分页
* 4 调试
* 5 笔记


在这个指南, 我们将显示给您怎么用一个Ajax form分页替换一个静态form-widget,
其中使用opentaps Form页码框架。

例如
财政> 配置> > 帐户显示:所有总帐户被配置为公司。最初, 帐户列表ofbiz form widget被创造, 但因为一个公司有几百个帐户与它交往, 这样一个静态形式不是非常不友好的。它总是每页显示了100 个GL 帐户, 并且分页是很缓慢的。


一、配置Screen Widget

第一步将编辑screen widget XML和移除form widget。编辑hot-deploy/financials/widget/financials/screens/ConfigurationScreens.xml
并且寻找screen "listGlAccounts" 。ajax 页码需要写在freemarker (FTL) 中, 您可以去除类似下面的form widget :

<container style="screenlet-body">
<include-form name="listGlAccounts" location="component://financials/widget/financials/forms/configuration/ConfigurationForms.xml"/>
</container>

你也许要删除以下内容:

<set field="viewIndex" from-field="parameters.VIEW_INDEX" type="Integer" default-value="0"/>
<set field="viewSize" from-field="parameters.VIEW_SIZE" type="Integer" default-value="100"/>

这些已不再是必要的,因为他们从服务器端控制GL 帐户列表的页码, 但是opentaps Ajax pagination form允许用户设置页码选择。


配置分页查询


第二步将配置数据为分页。如果您做一个查询或建立List of Maps 或者GenericValues, 您不需要做什么: 您可以把list直接传给paginator。您也可以在beanshell中为paginator定义一个查询 。这样paginator仅仅查询您需要的, 而不是把这个实体的所有数据都都查出来,然后存在内存中。

在多数opentaps 应用, bsh脚本是用来做查找数据,和然后返回一个list 或者 list iterator为FTL 页面或 form widget XML, 象这样:

accounts = EntityUtil.filterByDate(delegator.findByAndCache("GlAccountOrganizationAndClass",
UtilMisc.toMap("organizationPartyId", session.getAttribute("organizationPartyId")), UtilMisc.toList("accountCode")));
context.put("accounts", accounts);

Ajax 分页中, FTL 页面需要动态数据, 我们通过bsh查询数据返回给FTL 。


glAccountListBuilder(organizationPartyId) {

entityName = "GlAccountOrganizationAndClass";
where = UtilMisc.toList(
new EntityExpr("organizationPartyId", EntityOperator.EQUALS, organizationPartyId),
EntityUtil.getFilterByDateExpr()
);
orderBy = UtilMisc.toList("accountCode");

return this;
}

这个方法定义哪个实体(GlAccountOrganizationAndClass) 将被查询, 需要什么条件, 并且查询结果如何排序。 entityName, where, orderBy, having, fieldsToSelect, 可以用来配置查询分页。注意, orderBy 指定这里最初的命令由序列。
然后, 您必须确定方法这样做:

return this;

下一步是正确的通过这个方法返回给FTL, 象这样:
context.put("glAccountListBuilder", glAccountListBuilder(session.getAttribute("organizationPartyId")));

在 FTL中分页

GL 帐户的分页在一个FTL 文件将被处理,例如 glAccounts.ftl, 开始只显示header。首先我们将import the opentaps form 指令:

< @import location="component://opentaps-common/webapp/common/includes/lib/opentapsFormMacros.ftl"/>

然后, 我们用< @paginate > form 指令调用在BSH 中创建的list:

< @paginate name="glAccountOrganization" list=myList >


我们能够使用我们在BSH 创建的方法:

< @paginate name="glAccountOrganization" list=glAccountListBuilder >

我们将关闭freemarker里的分页指令:

< # noparse >


接下来, 我们使用页码按钮, 对首页和尾页的list以< @paginationNavContext/>:

<div class="subSectionHeader">
<div class="subMenuBar">
<@paginationNavContext />
</div>
</div>

这在大部分时候都是必需的。 你会装饰你的form中的 table的header, 使用 <@headerCell> 来装饰 the heading ,list 结果也能够order排序:

<table class="listTable">
<tr class="listTableHeader">
<@headerCell title=uiLabelMap.FinancialsGLAccountCode orderBy="accountCode"/>
<@headerCell title=uiLabelMap.FinancialsGLAccountName orderBy="accountName"/>
<@headerCell title=uiLabelMap.FinancialsPostedBalance orderBy="postedBalance"/>
<td> </td>
</tr>

其次, 您会使用FTL <#list> 来显示各自的列。 pageRows 从分页指令返回:

<#list pageRows as row>
<tr class="${tableRowClass(row_index)}">
<@displayCell text=row.accountCode/>
<@displayCell text=row.accountName/>
<td class="textright" style="padding-right: 40px"><@displayCurrency amount=row.postedBalance/></td>
<td>
<@displayLink href="reconcileAccounts?glAccountId=${row.glAccountId}" text=uiLabelMap.FinancialsReconcile/>
<@displayLink href="updateGlAccountScreen?glAccountId=${row.glAccountId}" text=uiLabelMap.CommonEdit/>
<@displayLink href="addSubAccountScreen?glAccountId=${row.glAccountId}" text=uiLabelMap.FinancialsAddSubAccount/>
<@displayLink href="removeGlAccountFromOrganization?glAccountId=${row.glAccountId}&organizationPartyId=${row.organizationPartyId}" text=uiLabelMap.FinancialsDeactivate/>
</td>
</tr>
</#list>

tableRowClass 为您由页码来定义不同的CSS为不同的列。您能使用FTL 和HTML 显示结果或者使用form指令, 例如< @displayLink > 或< @displayCell > 。

最后, 您会象这样: </table>
</#noparse>
</@paginate>


调试

您应该注意调试paginator 的几点事项:

1. ofbiz 框架缓存freemarker 文件, 因此在改变您的ftl 文件以后, 确定您清除缓存(Webtools > Cache)。否则, 变化不能出现。
2. paginator 的内容被查询通过AJAX 在主页装载了之后。 如果您做了一个" "View Page Source"" 在您的浏览器, 它不会显示内容里面的页数。如果您使用Firefox, 您能高亮现示分页的区域, 用鼠标右键单击, 和点击"View Selection Source" 观看您的paginator HTML 代码。

笔记

如果您使用EntityListBuilder, 然后增加另外的字段, 您不能用数据库table中没有的字段排序。

paginator 可能接受另外的参量。他们可能通过作为@paginate 的一部分, 象这样:

<@paginate name="pendingInboundEmails" list=inboundEmails
teamMembers=teamMembers>

然后, 在paginator 里面, 您能访问他们使用parameters Map, 象这样:

<#if parameters.teamMembers?has_content>
...
<#list parameters.teamMembers as option>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值