项目版本:2.3.1
问题:点击10次下一页,页面的内容可能也就会加载3次,其余的7次的内容是不变的,数据库中的数据是没问题的。不止这一个fragment有问题
项目版本:2.3.1
问题:点击10次下一页,页面的内容可能也就会加载3次,其余的7次的内容是不变的,数据库中的数据是没问题的。不止这一个fragment有问题
fragment中的datagrid使用的数据源是外部提供的还是fragment自带的?
在fragment中的onHostBeforeShow()
方法中用下面的方式查询的
Dl.setQuery(sql.toString());
Dl.setParameters(paramMap);
Dl.load();
我试了试,没有重现你的问题:
fragment xml:
<fragment xmlns="http://jmix.io/schema/flowui/fragment">
<data>
<collection id="productsDc" class="com.company.jmix2sample.entity.Product">
<fetchPlan extends="_base"/>
<loader id="productsDl" readOnly="true"/>
</collection>
</data>
<content>
<vbox id="root">
<hbox id="buttonsPanel" classNames="buttons-panel">
<simplePagination id="pagination" dataLoader="productsDl" itemsPerPageVisible="true"
itemsPerPageItems="2,4,6"/>
</hbox>
<dataGrid id="productsDataGrid" dataContainer="productsDc" minWidth="100px" width="100%">
<actions>
<action id="create" type="list_create"/>
<action id="edit" type="list_edit"/>
<action id="remove" type="list_remove"/>
</actions>
<columns>
<column property="name"/>
<column property="status"/>
<column property="inStock"/>
<column property="stockNum"/>
<column property="stockPosition"/>
</columns>
</dataGrid>
</vbox>
</content>
</fragment>
fragment controller:
@FragmentDescriptor("product-list-fragment.xml")
public class ProductListFragment extends Fragment<VerticalLayout> {
@ViewComponent
private CollectionLoader<Product> productsDl;
@Subscribe(target = Target.HOST_CONTROLLER)
public void onHostBeforeShow(final View.BeforeShowEvent event) {
productsDl.setQuery("select p from jmx2sp_Product p");
productsDl.load();
}
}
我这里是这样的
fragment xml:
<fragment xmlns="http://jmix.io/schema/flowui/fragment">
<data>
<collection id="inWingDc" class="xxxx.InWingBasic">
<fetchPlan extends="_base"/>
<loader id="inWingDl" readOnly="true">
<!-- <query>-->
<!-- <![CDATA[select e from InWingBasic e where e.weeklyDetail.id like :weeklyDetail or e.weeklyMst.id like :weeklyMst]]>-->
<!-- </query>-->
</loader>
</collection>
</data>
<content>
<vbox id="inWingVbox" css="border:1px solid #dbdfe4; border-radius: 10px;">
<nativeLabel text="msg://xxx/InWingBasic"/>
<hbox id="inWingButtonsPanel" classNames="buttons-panel">
<button id="createInWingBtn" action="inWingDataGrid.create"/>
<button id="editInWingBtn" action="inWingDataGrid.edit"/>
<button id="removeInWingBtn" action="inWingDataGrid.remove"/>
<button id="pullDataBtn" action="inWingDataGrid.pullData"/>
</hbox>
<dataGrid id="inWingDataGrid"
dataContainer="inWingDc"
width="100%"
columnReorderingAllowed="true"
themeNames="row-stripes column-borders"
allRowsVisible="true"
maxHeight="25em"
minHeight="150px">
<actions>
<action id="create" type="list_create">
<properties>
<property name="openMode" value="DIALOG"/>
</properties>
</action>
<action id="edit" type="list_edit">
<properties>
<property name="openMode" value="DIALOG"/>
</properties>
</action>
<action id="remove" type="list_remove"/>
<action id="pullData" text="msg:///pullData"/>
</actions>
<columns resizable="true">
......
<column property="dataDate" autoWidth="true"/>
......
<column property="decayRate" autoWidth="true"/>
<column property="installDate" autoWidth="true"/>
<column property="dataSource" autoWidth="true"/>
</columns>
</dataGrid>
<hbox classNames="buttons-panel">
<simplePagination id="inWingPagination" dataLoader="inWingDl"
itemsPerPageVisible="true"
itemsPerPageDefaultValue="10"
itemsPerPageItems="10, 20, 30, 50"/>
</hbox>
</vbox>
</content>
</fragment>
fragment controller:
@Subscribe(target = Target.HOST_CONTROLLER)
public void onHostBeforeShow(final View.BeforeShowEvent event) {
StringBuilder sql = new StringBuilder("select e from InWingBasic e where 1 = 1");
Map<String, Object> paramMap = new HashMap<>();
if (weeklyDetail != null) {
sql.append(" AND e.weeklyDetail.id = :weeklyDetail");
paramMap.put("weeklyDetail", weeklyDetail.getId());
} else {
sql.append(" AND e.weeklyMst.id = :weeklyMst");
paramMap.put("weeklyMst", weeklyMst.getId());
}
sql.append(" order by e.xxx, e.xxx");
inWingDl.setQuery(sql.toString());
inWingDl.setParameters(paramMap);
inWingDl.load();
if (!hasLineNumber) {
dataGridService.addIndexColumn(inWingDataGrid, inWingDc);
hasLineNumber = true;
}
}
你点的太快了。每点一下翻页都要执行一个sql,如果前一个sql没执行完,又点一下,可能就不会刷新数据。点击翻页时可以看看后台有没有类似输出:
注意需要修改这个配置才能看到sql:
logging.level.eclipselink.logging.sql = debug
好 我试一下
我看了一下控制台的sql,在数据库里面复现了一下,查的有问题,最后面的那两个分页,查询出来的数据是一样的,但是我数据库里的数据是没问题的,都是不同的数据
找到原因了,是因为我根据其中的某两个字段查询,但是这两个字段重复的数据很多,所以导致每次都是根据这两个字段进行排序后展示,所以永远展示的都是那10条数据