0

我对 Struts2 比较陌生。我已经开始使用 ModelDriven 来减少开发开销。我想编写一个接口来在属性执行操作之前对其进行修改,但我看不到如何访问为模型实现 ModelDriven 的类的属性。

我可以看到像 validate() 这样的东西在实际操作类中是如何工作的。我改变了设计以封装服务背后的逻辑,但仍然想知道这是否可能。

我们通过 ajax/json 做所有事情,所以我发现模型驱动有很大帮助——虽然不确定是否有更好的选择!

编辑 - 代码示例:

尝试用模板中的消息替换消息以在电子邮件正文中使用。

public class EmailActionImpl implements EmailAction {

private Email email=new Email();    
private EmailService emailService;

public Email getModel(){
    return email;
}
[... getters and setters ...]

    public String execute(){
    logger.info("Email action is sendind an email...");

    try{
        emailService.sendNewMail(email);
    }catch(Exception e){
        logger.error("Email not sent: " + e.getMessage());
        return "failure";
    }   
    return "success";
}
}

像这样的电子邮件模型

@Entity
@Table(name="email")
public class Email {
private Long id;
private String from;
private String to;
private String message;
private String templateType;
 [...]
 }

我想要一个拦截器预处理器来替换 email.message。应该看起来像这样,但 action.getMessage/setMessage 不可用。

public class SimpleInterceptor extends AbstractInterceptor {

public String intercept(ActionInvocation invocation) throws Exception {
   EmailAction action = (EmailAction)invocation.getAction();
   action.setMessage(MessageTemplateFactoryImpl(action.getMessage(), action.getTemplateType());
   return invocation.invoke();
}
}
4

1 回答 1

0

如果您仍然想实现一个拦截器来处理一组特定的模型,那么您将检查 Action 是否实现了 ModelDriven。通过反射(或 Apache bean utils),您可以派生有问题的特定模型,以确定您的拦截器是否适用,然后相应地对其进行操作。

于 2012-03-26T20:42:20.883 回答