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 楼答案
在做了大量的试错之后,我知道我必须重写
TilesRequestProcessor
的processForwardConfig
方法。在那里,我必须将path
对象的ForwardConfig
值覆盖到我的新布局,即login_chrome
请参阅以下代码: