我有这个 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);
}
奇怪的是,当products
我第一次检索所有对象(我的数据库中的所有对象)时,我提到的上述循环重复出现在我的列表中。datatable
最后,即使我尝试在我的“这里发生了什么”中过滤结果,网页也会再次返回所有产品?