Struts2 - Реализация ModelDriven - Создать перехватчик, который обращается к свойствам модели
Я относительно новичок в Struts2. Я начал использовать ModelDriven для уменьшения накладных расходов при разработке. Я хотел написать интерфейс для изменения свойства, прежде чем оно перейдет к действию, но я не понимаю, как вы можете получить доступ к свойствам класса, который реализует ModelDriven для Model.
Я вижу, как такие вещи, как 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();
}
}
1 ответ
Если вы все еще хотите реализовать перехватчик для работы с определенным набором моделей, то вы проверите, реализует ли Action ModelDriven. С помощью рефлексии (или утилит бина Apache) вы можете получить конкретную модель, чтобы определить, применяется ли ваш перехватчик, и затем действовать соответственно.