我有这个JSF支持bean方法:
public void filterProductsByCategory()
{
filtered = true;
products = controller.obtainProductListByCategory(selectedDesiredCategory);
showMessage("Filtered by selected category");
}
调用obtainProductListByCategory
方法。这将返回products
的列表。当需要刷新JSF页面(它访问所需变量的getter)时,它会进入getter:
public List<Product> getProducts()
{
if(filtered)
{
filtered = false;
return products;
}
products = controller.obtainProductList();
return products;
}
obtainProductList
检索数据库中的所有产品。我的应用程序是一个网络市场,我要做的是首先:显示所有产品(工作正常),然后:按类别排序(有问题)。出于某种原因,即使在最后一个方法输入if
语句并返回之后,它也会返回内部,变量filtered
为false并继续执行该方法。
我通过调试发现这段代码似乎也每次都执行(位于 Method.java 中):
public Object invoke(Object obj, Object... args)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException
{
if (!override) {
if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
Class<?> caller = Reflection.getCallerClass(1);
checkAccess(caller, clazz, obj, modifiers);
}
}
MethodAccessor ma = methodAccessor; // read volatile
if (ma == null) {
ma = acquireMethodAccessor();
}
return ma.invoke(obj, args);
}
奇怪的是,我第一次检索所有对象(我数据库中的所有对象)时,我的List中存在的products
重复了上面提到的循环。最后,网页会重新获得所有产品,即使我尝试过滤结果datatable
这里发生了什么?