今天在使用auto-fields-service标签实现自动填充表单时遇到几个问题,花费好长时间才找到解决办法。主要有一下几个问题:
1. 定义auto-fields-service标签的 service-name属性时注意属性名称首字母的大小写,该名称必须与services.xml中定义的服务名称一致,否则会报错,提示找不到XXX服务。
最好是约定统一所有服务名称首字母都小写(或大写),习惯java的命名方式了,所以我一般都统一为首字母小写。
<auto-fields-service service-name="updateTerm" map-name=""/>
2. 提示Could not find resource bundle [BookingEntityLabels] in the locale [zh]
解决方案:在BookingEntityLabels.xml文件中加入至少一条含有【zh】的国际化定义。如:
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-properties.xsd">
<property key="CostComponentType.description.ACTUAL_LABOR_COST">
<value xml:lang="en">Actual Labor Cost</value>
<value xml:lang="zh">实际劳务费用</value>
<value xml:lang="zh-TW">實際工作投入費用</value>
</property>
</resource>
因为之前我的BookingEntityLabels.xml文件中只定义了resource标签,没有定义property标签。至少定义一个,可以随便定义,否则会报错。
3. 配置了auto-fields-service,但没效果,表单还是没有自动填充。
解决方案:需要配置表单标签时配置default-map-name和 default-entity-name属性。如:
<form name="EditTerm" target="updateTerm" title="" type="single" header-row-style="header-row"
default-table-style="basic-table" default-map-name="term" default-entity-name="Term">
<auto-fields-service service-name="updateTerm" map-name=""/>
如果不配置default-map-name和 default-entity-name属性,则自动填充没有效果。