gpt4 book ai didi

session - 如何存储操作的参数以供以后再次使用

转载 作者:行者123 更新时间:2023-12-02 14:16:09 26 4
gpt4 key购买 nike

我有一个可以排序,搜索和过滤的列表 View 。从该列表 View 中,用户可以分多个步骤编辑项目。最后,在编辑和查看更改之后,用户将返回列表。现在,我希望列表使用用户之前设置的相同排序,搜索词和过滤器,并显示正确的结果。

显示列表操作时,如何存储和重用多个参数(排序,搜索,过滤器)?

我认为的可能不令人满意的方式:

  • 传递所有必需的参数。如果两个列表操作调用
  • 之间涉及多个操作,则几乎不起作用
  • 将参数保存在 session 对象中。这似乎需要大量代码来处理多个参数(检查是否将参数传递给操作,存储新值,如果未传递参数,从 session 中获取旧参数,处理空字符串参数):
    Long longParameter
    if(params.containsKey('longParameter')) {
    longParameter = params.getLong('longParameter')
    session.setAttribute('longParameter', longParameter)
    } else {
    longParameter = session.getAttribute('longParameter') as Long
    params['longParameter'] = longParameter
    }
  • 最佳答案

    如果要使其更通用,可以改用Interceptor

    也许可以这样概括:

    class SessionParamInterceptor {
    SessionParamInterceptor() {
    matchAll() // You could match only controllers that are relevant.
    }

    static final List<String> sessionParams = ['myParam','otherParam','coolParam']

    boolean before() {
    sessionParams.each {
    // If the request contains param, then set it in session
    if (params.containsKey(it)) {
    session[it] = params[it]
    } else {
    // Else, get the value from session (it will be null, if not present)
    params[it] = session[it]
    }
    }

    true
    }
    }

    静态 sessionParams包含您要在 session 中存储/检索的参数。

    如果 params包含列表中的元素,则将其以相同的名称存储在 session中。如果没有,则从 session中获取(假设存在)。

    在您的 Controller 中,您现在可以像往常一样访问 params.getLong('theParam')。您还可以使用Grails参数转换:
    def myAction(Long theParam) {

    }

    节省了大量LOC。

    关于session - 如何存储操作的参数以供以后再次使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40149490/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com