我對Struts2比較陌生。 我已經開始使用ModelDriven來減少開發中的開銷。 我想編寫一個接口來修改一個屬性,但是我沒有看到如何訪問爲模型實現ModelDriven的類的屬性。Struts2 - 實現ModelDriven - 創建一個訪問模型屬性的攔截器
我可以看到像validate()這樣的事情可以像在實際操作類中一樣工作。 我改變了設計來封裝服務背後的邏輯,但仍然想知道這是否可能。
我們正在通過ajax/json做所有事情,所以我發現modeldriven有相當多的幫助 - 不知道是否有更好的替代方案!
編輯 - 代碼示例:
試圖在一個模板,一個消息來替換消息中的電子郵件正文中使用。
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();
}
}
如果我明白它的權利,你想修改從表單中設置的屬性? – 2012-03-22 16:08:42
你究竟想要做什麼?不知道這很難說。您可以修改請求中的值,但實現自己的類型轉換器通常更有意義。這兩種方法都涵蓋了很多情況,並避免檢查操作並直接使用自己的攔截器設置值。 – Quaternion 2012-03-22 18:46:34
我會盡快發佈代碼示例。 – JasonG 2012-03-22 18:59:47