gpt4 book ai didi

java - 对网络应用程序流口水

转载 作者:行者123 更新时间:2023-12-01 13:52:20 26 4
gpt4 key购买 nike

我对 drools 很陌生,但我想将它集成到我现有的项目中。我正在使用 Spring MVC 框架。我成功地实现了来自 drools 免费项目的简单示例 hello world。我现在想做的是:

  1. 将 Bean 发送到规则以供其评估。
  2. 根据规则修改bean
  3. 将其发送回 Controller 以对用户做出响应。

第 1 步我已经完成了。我能够将 bean 插入规则中。我现在的规则是这样的:

global String $test;

rule "Excellent"

when
$m: FLTBean ( listeningScore > 85 )
$p: FLTBean ( listeningScore < 101 )
then
$test = "Excellent";
System.out.println( $test );

end

对于步骤2步骤3我不知道该怎么做。如果可能的话,请给我一个简单的代码来执行此操作。我想要嵌套规则。以 2 个嵌套规则为例就很好了。

提前致谢。

最佳答案

有多种方法可以实现此目的,具体取决于您使用的是无状态 session 还是有状态 session 。

rule "Excellent"
no-loop
when
$m: FLTBean ( listeningScore > 85 && listeningScore < 101 )
then
$m.setRating("Excellent")
update( $m )
end

在这种情况下,无状态 session 的 Java 代码可能是:

FLTBean flt = new FLTBean(); 
flt.setScore(91);
List<Object> facts = new ArrayList<Object>();
facts.add(flt);
ksession.execute(facts);
System.out.println("Result is " + flt.getRating());

如果您使用的是有状态 session ,那么您可以插入事实、触发规则,然后从工作内存中查询事实。您的规则可以将新事实插入到工作内存中,如下所示:

rule "Excellent"
when
$m: FLTBean ( listeningScore > 85 && listeningScore < 101 )
then
insert( new FLTResult("Excellent") )
end

要再次返回结果,您可以使用 Drools API 查找工作内存中的任何对象。

/** Provide a reference to the session and the class name 
* of the fact you are searching for.
*/
public Collection<Object> findFacts(final StatefulKnowledgeSession session,
final String factClass) {

ObjectFilter filter = new ObjectFilter() {
@Override
public boolean accept(Object object) {
return object.getClass().getSimpleName().equals(factClass);
}
};

Collection<Object> results = session.getObjects(filter);
return results;
}

// And call that like so:
FLTBean flt = new FLTBean();
flt.setScore(91);
ksession.insert(flt);
ksession.fireAllRules();
results = findFacts(ksession, "FLTResult");

关于java - 对网络应用程序流口水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19874212/

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