1

我有这个 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语句并返回之后,它也会返回内部,变量为filteredfalse 并继续执行该方法。

我通过调试发现这段代码似乎也每次都执行(位于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最后,即使我尝试在我的“这里发生了什么”中过滤结果,网页也会再次返回所有产品?

4

0 回答 0