0

我实现了一个网站的高级搜索模块(在 Struts 2 中制作)。此搜索区域是一个包含许多不同字段的表单。我可以根据选择将字符串放入所有、某些或没有获得不同结果的字段中。我现在要做的是用一个很大的错误 if/elseif 语句检查是否有空白字段(以及哪些),然后应用正确的方法。

例子

    if (field_1.equals("") && field_2.equals("")) {
        dao.searchAll;
    } else if (field_1.equals("") && !field_2.equals("")) {
        dao.searchType1;
    } else if (!field_1.equals("") && !field_2.equals("")) {
        dao.searchType2;
    } else if {
       ...
       ...

dao 的方法是 HQL(休眠)查询。

这个例子比我有 5 个文本输入字段的例子更简单。

有更好更灵活的方法来做同样的事情吗?一些设计模式,比如策略?

4

2 回答 2

1

Struts真的很弱。首先要注意的是不要将您的行为直接与界面组件联系起来。在 JSF 中,您可以将这些字段绑定到类上的属性,然后从那里引用它们(体现查询分派的组件应该对输入源一无所知)。

调度程序基本上就是你在这里所拥有的:当收到某些消息时,触发特定的响应。我会将这些值放入一些不可变的形式,然后创建一个工厂方法来获取或进行适当的查询。然后在工厂构造之外执行。

这不是一种策略。您可能有不同的方法来确定要做什么,但这是一个创造性的问题:您正在将输入片段转换为查询。

于 2013-01-16T16:17:28.603 回答
0

看看Hibernate Criteria API。您可以使用它来构建基于字段的查询。因此,例如,您可以编写如下内容:

Criteria criteria = session.createCriteria(Some.class);
if (!field_1.equals("")) {
  criteria.add( /*some criteria for field_1 */ );
}
if (!field_2.equals("")) {
  criteria.add( /*some criteria for field_2 */ );
}
于 2013-01-16T15:34:54.773 回答