0

モバイルと Web で実行される Spring アプリケーションに取り組んでいます。Web ではすべて正常に動作しますが、モバイルではフォームが投稿されるとコントローラーにヒットし、コントローラーが他のアプリケーションにリダイレクトされます。

@RequestMapping(value = "/common", method = RequestMethod.GET)
public String showLandingPage(HttpServletRequest req, HttpServletResponse response, Model model) {
logger.debug("Received request to set partner info");
Device currentDevice                = DeviceUtils.getCurrentDevice(req);
setCookies(response);
Properties props = new Properties();
try {
    props.load(getClass().getClassLoader().getResourceAsStream( "sampleApp.properties"));
} catch (IOException e) {
    logger.fatal(new StringBuilder("MainController : setCookies() : Error while reading sampleApp.properties "+e));
}catch (Exception e) {
    logger.fatal(new StringBuilder("MainController : setCookies() : Error while reading sampleApp.properties "+e));
}
if(currentDevice.isMobile() || currentDevice.isTablet()){
    return "redirect:"+props.getProperty("popcorn-mobile-url");
} else {               
    return "redirect:"+props.getProperty("popcorn-web-url");
}
}

コントロールがリダイレクトの場所に移動すると、画面に「ページの読み込みエラー」が表示されます。

JSP では、次の jQuery ライブラリを使用しています。

    <script src="${pageContext.request.contextPath}/js/mobile/mobile-config.js"></script> 
    <script src="${pageContext.request.contextPath}/js/mobile/jquery.mobile-1.2.0.min.js"></script>
    <script src="${pageContext.request.contextPath}/js/mobile/plugins.js"></script>
4

1 に答える 1

0

以下のようなデバイスインターセプターを使用します。

public class DeviceInterceptor extends HandlerInterceptorAdapter {    
private final DeviceResolver deviceResolver;

    private Device device;

    /**
     * Create a device resolving {@link HandlerInterceptor} that defaults to a
     * {@link LiteDeviceResolver} implementation.
     */
    public DeviceInterceptor() {
        this(new LiteDeviceResolver());
    }

    public DeviceInterceptor(DeviceResolver deviceResolver) {
        this.deviceResolver = deviceResolver;
    }

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception    {
        device = deviceResolver.resolveDevice(request);
        request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device);
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler, ModelAndView modelAndView) throws Exception {
    if (device.isMobile()) {
            modelAndView.setViewName("/mobile/" + modelAndView.getViewName());
        }else {
            modelAndView.setViewName("/jsp/" + modelAndView.getViewName());
        }           
    }
于 2013-02-06T10:31:49.250 に答える