Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在TileRequestProcessor中更改布局定义运行时_Java_Struts_Tiles - Fatal编程技术网

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

Java 如何在TileRequestProcessor中更改布局定义运行时,java,struts,tiles,Java,Struts,Tiles,我有一个设想, 当请求来自IE浏览器时,显示login(这是默认行为),当请求来自Chrome浏览器时,显示login\u Chrome(布局定义在Tiles.xml中,如下所示) 注意:我不想把逻辑放在JSP中,根据条件选择包含的JSP 请帮助我并告诉我要覆盖tileRequestProcessor的哪种方法来动态更改tile定义?在做了大量尝试和错误后,我知道我必须覆盖tileRequestProcessor的processForwardConfig方法。在那里,我必须将path对象的For

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

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


请帮助我并告诉我要覆盖
tileRequestProcessor
的哪种方法来动态更改tile定义?

在做了大量尝试和错误后,我知道我必须覆盖
tileRequestProcessor
processForwardConfig
方法。在那里,我必须将
path
对象的
ForwardConfig
值覆盖到我的新布局,即
login\u 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);
      }
   }
}
    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);
   } 
}
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);
      }
   }
}