2014. 10. 8.

Mobile version of sitemesh decorator

pom.xml

    org.springframework.mobile
    spring-mobile-device
    1.1.2.RELEASE


Spring interceptor
<mvc:interceptors>
    <!-- request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE = "currentDevice", org.springframework.mobile.device.Device); -->
    <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" />
    <!-- request.setAttribute(SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE = "currentSitePreference", org.springframework.mobile.device.site.SitePreference); -->
    <bean class="org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor" />
</mvc:interceptors>

SpringMobileParameterDecoratorMapper.java
package com.yoursite.common.mapper;

import java.util.Properties;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mobile.device.site.SitePreference;
import org.springframework.mobile.device.site.SitePreferenceUtils;

import com.opensymphony.module.sitemesh.Config;
import com.opensymphony.module.sitemesh.Decorator;
import com.opensymphony.module.sitemesh.DecoratorMapper;
import com.opensymphony.module.sitemesh.Page;
import com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper;

/**
 * sitemesh 2.4 용 DecoratorMapper
 * @author ysh3342
 *
 */
public class SpringMobileParameterDecoratorMapper extends ConfigDecoratorMapper {
 private static final Logger logger = LoggerFactory
   .getLogger(SpringMobileParameterDecoratorMapper.class);
 // private String decoratorName = null;

 private static final String MOBILE_DECORATORNAME = "mobile";
 private static final String TABLET_DECORATORNAME = "tablet";

 public void init(Config config, Properties properties,
   DecoratorMapper parent) throws InstantiationException {
  super.init(config, properties, parent);
  // decoratorName = properties.getProperty("decorator.name", "mobile");
  // logger.debug("init decoratorName : {}", decoratorName);
 }

 public Decorator getDecorator(final HttpServletRequest request,
   final Page page) {
  SitePreference sitePreference = SitePreferenceUtils
    .getCurrentSitePreference(request);
  if (sitePreference != null) {
   logger.debug("sitePreference.isNormal() : {}",
     sitePreference.isNormal());
   logger.debug("sitePreference.isMobile() : {}",
     sitePreference.isMobile());
   logger.debug("sitePreference.isTablet() : {}",
     sitePreference.isTablet());
   if (sitePreference.isMobile()) {
    return getNamedDecorator(request, MOBILE_DECORATORNAME);
   } else if (sitePreference.isTablet()) {
    return getNamedDecorator(request, TABLET_DECORATORNAME);
   } else {
    return super.getDecorator(request, page);
   }
  }
  logger.debug("super.getDecorator(request, page);");
  return super.getDecorator(request, page);
 }
}

sitemesh.xml
<property name="decorators-file" value="/WEB-INF/decorators.xml"/>
<decorator-mappers>
    <mapper class="com.yoursite.common.mapper.SpringMobileParameterDecoratorMapper">
        <param name="config" value="${decorators-file}"/>
    </mapper>
</decorator-mappers>

댓글 없음:

댓글 쓰기