匹配多个action时究竟执行哪个

本文深入分析了Struts2配置文件中如何根据URL匹配Action的方法,通过实例展示了URL匹配规则及顺序对Action选择的影响。

<packagename="member_action"namespace="/member"extends="struts-default">

    <actionname="maintain_*"class="com.gathershell.action.MemberMaintainAction"method="{1}">

       <resultname="findOne">/WEB-INF/member/findOne.jsp</result>

    </action>

    <actionname="*"class="com.gathershell.action.MemberAction"method="{1}">

       <resultname="register">/WEB-INF/member/memberRegister.jsp</result>

    </action>

</package>

如果访问http://localhost:8080/ShopOnline/member/maintain_findOne,它可以匹配第一个action,也可以匹配到第二个,那么它会选那个呢?按说应是第一个,它的匹配更精确些,实事也就是匹配了第一个。不过它并不是按照sevlet通配符的模式工作的,因为当我把上面两个action的顺序调换后,它匹配的action也变了。看来它是按书写顺序找到能够匹配的第一个。

如果有多条数据需要匹配多个条件,并且要求多个条件都满足才能触发规则,并且需要对这些数据进行统一的操作,可以使用 Easy Rules 的动作组(ActionGroup)来实现。 以下是一个示例代码,演示如何使用 Easy Rules 4.0.0 匹配多个事实和多个条件,并对满足条件的数据进行统一操作: ```java // 创建多个事实 List<Fact> facts = Arrays.asList( new Fact("orderAmount", 100), new Fact("orderStatus", "PAID"), new Fact("orderAmount", 200), new Fact("orderStatus", "SHIPPED"), new Fact("orderAmount", 300), new Fact("orderStatus", "DELIVERED") ); // 创建多个条件 Condition condition1 = new OrderAmountCondition(); Condition condition2 = new OrderStatusCondition(); // 创建条件组 ConditionGroup conditions = new ConditionGroup(ConditionGroupType.AND); conditions.addCondition(condition1); conditions.addCondition(condition2); // 创建动作 Action action = new MyAction(); // 创建动作组 ActionGroup actions = new SequentialActionGroup(); actions.addAction(action); // 创建规则 Rule rule = new MyRule(conditions, actions); // 创建规则引擎 RulesEngine rulesEngine = new DefaultRulesEngine(); // 执行规则 for (Fact fact : facts) { rulesEngine.fire(rule, fact); } ``` 在上述示例代码中,我们首先创建了六个事实,分别对应了三个订单的金额和状态。然后我们创建了两个条件 `OrderAmountCondition` 和 `OrderStatusCondition`,用于匹配订单金额和状态是否满足要求。接着,我们创建了一个条件组 `conditions`,将两个条件都添加到条件组中,并指定条件组类型为 `AND`,表示多个条件都需要满足才能触发规则。同,我们创建了一个动作 `MyAction`,表示对满足条件的数据进行统一操作。最后,我们创建了一个动作组 `actions`,将动作添加到动作组中,并指定动作执行顺序为顺序执行。将动作组添加到规则中,并将多个事实逐一传递给规则引擎进行匹配。 需要注意的是,在使用动作组,需要注意动作之间的执行顺序,可以指定为顺序执行或并行执行,并根据具体需求进行配置。另外,Easy Rules 还提供了其他多种类型的动作组和动作组合方式,可以根据具体需求进行使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值