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

それでも特定のモデルのセットで機能するインターセプターを実装する場合は、アクションがModelDrivenを実装しているかどうかを確認します。リフレクション(またはApache bean utils)を介して、問題の特定のモデルを導き出し、インターセプターが適用されるかどうかを判断し、それに応じて動作することができます。

于 2012-03-26T20:42:20.883 に答える