有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在TileRequestProcessor中更改布局定义运行时

我有一个设想, 当请求来自IE浏览器时,显示login(这是默认行为),当请求来自Chrome浏览器时,显示login_chrome(布局定义在Tiles.xml中,如下所示)

<definition name="login" path="/login/login1.jsp"></definition>
<definition name="login_chrome" path="/login/login2.jsp"></definition>

我有CustomizedTileProcessor

    public class CustomizedTileProcessor extends TilesRequestProcessor
    {
     @Override
   protected boolean processTilesDefinition(String pDefinitionName, boolean pContextRelative, HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException, ServletException
   {
      if (isChromeBrowser(pRequest))
      {
         pDefinitionName+="_chrome";
      }
      return super.processTilesDefinition(pDefinitionName, true, pRequest, pResponse);
   } 
}

注意:我不想把逻辑放在JSP中,根据条件选择包含的JSP

请帮助我并告诉我要覆盖TilesRequestProcessor的哪个方法来动态更改磁贴定义


共 (1) 个答案

  1. # 1 楼答案

    在做了大量的试错之后,我知道我必须重写TilesRequestProcessorprocessForwardConfig方法。在那里,我必须将path对象的ForwardConfig值覆盖到我的新布局,即login_chrome

    请参阅以下代码:

    public class CustomizedTileProcessor extends TilesRequestProcessor
        {
         @Override
     protected void processForwardConfig(HttpServletRequest pRequest, 
           HttpServletResponse pResponse, ForwardConfig pForward) 
           throws IOException, ServletException
       {
          if(isChromeBrowser(pRequest))
          {
             ForwardConfig newForward = new ForwardConfig(pForward.getName(),
             pForward.getPath()+"_chrome", pForward.getRedirect(),
             pForward.getContextRelative());
    
             super.processForwardConfig(pRequest, pResponse, newForward);
          }
          else
          {
             super.processForwardConfig(pRequest, pResponse, pForward);
          }
       }
    }