【发布时间】:2015-06-21 04:11:10
【问题描述】:
我有一个 JSF 应用程序。在到达入口点时。
/MyApp/start.xhtml
该页面包含一个查看操作,该操作将根据查询字符串参数决定要转到哪个页面。
<f:viewAction action="#{startController.newQuote()}" />
.
@ManagedBean
@SessionScoped
public class StartController {
public String newQuote(){
....
FacesContext fc = FacesContext.getCurrentInstance();
ConfigurableNavigationHandler nav = (ConfigurableNavigationHandler)fc.getApplication().getNavigationHandler();
nav.performNavigation("aboutYou.xhtml?faces-redirect=true");
}
据我的过滤器,aboutYou.xhtml 被点击了 3 次。
@WebFilter("*.xhtml")
public class TrackingFilter implements Filter {
private static Logger LOG = Logger.getLogger(TrackingFilter.class);
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
LOG.trace("request URI: " + req.getRequestURI());
}
这是为什么?我怀疑这与?faces-redirect=true 使用的 PRG 模式有关,但我可能希望看到 2 次,而不是 3 次。
如何优化我的过滤器,以便只捕捉到移动到该页面的单个操作?
【问题讨论】:
-
您处理导航的方式不必要地笨拙(这里没有 POST 请求,它可以像命令按钮操作一样返回字符串结果),但它不应该导致 3目标页面上的请求。为了排除一个和另一个,浏览器的内置 HTTP 流量监视器到底说了什么? (不要忘记将其设置为保留登录重定向)
-
Firebug 的控制台打开持久化显示 x2 HTTP200 POSTs
-
笨拙是什么意思?你能建议一种更简洁的方法来拥有一个处理条目并根据 queryString 参数重定向到页面的入站链接
标签: jsf servlet-filters jsf-2.2