Roller的EntryAdd Action,继承自 : ActionSupport ---> UIAction --- > EntryBase ---> EntryAdd,
UIAction 同时实现了 : UIActionPreparable, UISecurityEnforced 接口
在struts配置中,定义了一个Interceptor:
<interceptor name="UIActionInterceptor"
class="org.apache.roller.weblogger.ui.struts2.util.UIActionInterceptor" />
这个Interceptor的主要工作就是对Action进行赋值:User 和 Weblog。
UIActionInterceptor的主要代码:
public String intercept(ActionInvocation invocation) throws Exception {
log.debug("Entering UIActionInterceptor");
final Object action = invocation.getAction();
final ActionContext context = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
// is this one of our own UIAction classes?
if (action instanceof UIAction) {
log.debug("action is a UIAction, setting relevant attributes");
UIAction theAction = (UIAction) action;
// 在Action中设置登陆的用户名
// extract the authenticated user and set it
RollerSession rses = RollerSession.getRollerSession(request);
if(rses != null) {
theAction.setAuthenticatedUser(rses.getAuthenticatedUser());
}
// 在Action中设置Weblog
// extract the work weblog and set it
String weblogHandle = theAction.getWeblog();
if(!StringUtils.isEmpty(weblogHandle)) {
Weblog weblog = null;
try {
UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
weblog = mgr.getWebsiteByHandle(weblogHandle);
if(weblog != null) {
theAction.setActionWeblog(weblog);
}
} catch(Exception e) {
log.error("Error looking up action weblog - "+weblogHandle, e);
}
}
}
return invocation.invoke();
}