如果我错了,请纠正我,但我认为我所有的非 AJAX 提交都应该使用 Post/Redirect/Get (PRG) 方式,因为 GET 应该用于刷新/查询数据,就我而言,我能想到的应用程序页面实际上只对数据进行更新,然后刷新页面,所以我认为 PRG 适合这里。
我相信我可以使用 faces-config.way 来做到这一点,我在其中使用<redirect/>
,或者我可以使用return "myview.xhtml?faces-redirect=true";
现在的问题是..
有什么方法可以全局配置这个,对于非 AJAX 调用/提交,自动使用 faces-redirect=true ,这样我的源就这么简单:
return "myview";
你可以用自定义来做到这一点ConfigurableNavigationHandler http://download.oracle.com/javaee/6/api/javax/faces/application/ConfigurableNavigationHandler.html。这是一个启动示例:
package com.example;
import java.util.Map;
import java.util.Set;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.application.NavigationCase;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
public class RedirectNavigationHandler extends ConfigurableNavigationHandler {
private NavigationHandler parent;
public RedirectNavigationHandler(NavigationHandler parent) {
this.parent = parent;
}
@Override
public void handleNavigation(FacesContext context, String from, String outcome) {
if (!outcome.endsWith("?faces-redirect=true")) {
outcome += "?faces-redirect=true";
}
parent.handleNavigation(context, from, outcome);
}
@Override
public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) {
if (parent instanceof ConfigurableNavigationHandler) {
return ((ConfigurableNavigationHandler) parent).getNavigationCase(context, fromAction, outcome);
} else {
return null;
}
}
@Override
public Map<String, Set<NavigationCase>> getNavigationCases() {
if (parent instanceof ConfigurableNavigationHandler) {
return ((ConfigurableNavigationHandler) parent).getNavigationCases();
} else {
return null;
}
}
}
注册如下faces-config.xml
:
<application>
<navigation-handler>com.example.RedirectNavigationHandler</navigation-handler>
</application>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)