0

Я относительно новичок в Struts2. Я начал использовать ModelDriven для уменьшения накладных расходов при разработке. Я хотел написать интерфейс, чтобы изменить свойство до его действия, но я не вижу, как вы можете получить доступ к свойствам класса, реализующего ModelDriven для модели.Struts2 - Реализация ModelDriven - Создание перехватчика, который обращается к свойствам модели

Я вижу, как такие вещи, как validate(), могут работать так, как они есть в действительном классе действий. Я изменил дизайн, чтобы в любом случае инкапсулировать логику обслуживания, но все же хотелось бы знать, возможно ли это.

Мы делаем все от ajax/json, поэтому я считаю, что modeldriven помогает довольно много - не уверен, что есть лучшая альтернатива!

Edit - пример кода:

Попытка заменить сообщение с сообщением в шаблоне для использования в теле сообщения электронной почты.

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"; 
} 
} 

Email модель что-то вроде этого

@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(); 
} 
} 
+0

Если я правильно понимаю, что вы хотите изменить свойство, заданное в форме? –

+0

Что именно вы пытаетесь сделать? Не зная, что это трудно сказать. Вы можете изменить значения в запросе, но обычно имеет смысл реализовать свой собственный конвертер типов. Оба они охватывают несколько случаев и не проверяют действие и напрямую устанавливают значения с помощью вашего собственного перехватчика. – Quaternion

+0

Я скоро отправлю примеры кода. – JasonG

ответ

0

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

+0

Great - true - отражение. Просто узнал эту концепцию вчера. Это был бы забавный эксперимент. – JasonG

Смежные вопросы