Struts2 - Реализация ModelDriven - Создать перехватчик, который обращается к свойствам модели - PullRequest
0 голосов
/ 22 марта 2012

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

1 Ответ

0 голосов
/ 27 марта 2012

Если вы все еще хотите реализовать перехватчик для работы с определенным набором моделей, то вы проверите, реализует ли Action ModelDriven.С помощью рефлексии (или утилит бина Apache) вы можете получить конкретную модель, чтобы определить, применяется ли ваш перехватчик, и затем действовать соответственно.

...