4
A
回答
0
不是真的。
在http协议或jsf中没有什么。
你可以找到一些“黑客”(编号你的请求),但我认为这将是复杂的最好。
如果客户问我这样的事情,我会让它支付很多功能,没有太多的保证。它对我来说看起来是不切实际的要求;-)
2
使用单个视图,其中您有条件地呈现包括。
<h:panelGroup id="body">
<ui:include src="#{bean.page}.xhtml" />
</h:panelGroup>
使豆视图作用域和使用commandlinks与<f:ajax>
改变包含的页面。
<h:form>
<h:commandLink value="Page 1" action="#{bean.setPage('page1')}">
<f:ajax execute="@this" render=":body" />
</h:commandLink>
<h:commandLink value="Page 2" action="#{bean.setPage('page2')}">
<f:ajax execute="@this" render=":body" />
</h:commandLink>
</h:form>
如果设置欢迎页面默认包括bean的(后)施工期间页面,然后一个全新的GET请求将始终显示欢迎页面。唯一的缺点是这些页面不再是可收藏的,但鉴于这个特殊的功能要求,这似乎并不是一个主要的问题。
0
我解决了使用下一个方法重新加载页面问题。
Phase listener
阶段RENDER_RESPONSE
创建NavigateHomePage
。 在需要浏览器重新加载的每个页面上,应导航到“主页”f:phaseListener
与type = "my.NavigateHomePage"
。
NavigateHomePage
在方法afterPhase
定义当前页名称(从request
路径)并将其存储在session
。
NavigateHomePage
在方法beforePhase
定义当前页名称(从request
路径),从session
取前一页面的名称和发生request method
。如果当前页面名称与前一页面名称相同,并且request method
为GET
且当前页面不是“主页”,则重定向到“主页”。
限制是对于这样的页面(浏览器重新加载导航到“主页”),不应该链接(通过GET
)自己。
要包含阶段监听器页面中添加下一个页面:
<f:phaseListener type="my.NavigateHomePage"/>
Phase listener
代码旁边:
public class NavigateHomePage implements PhaseListener {
private static final String CURR_PAGE = "currPage";
private static final String HOME_PAGE = "home";
private static final String HOME_PATH = "/my/faces/home.xhtml";
@Override
public void afterPhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
String currPage = getPageName(facesContext);
facesContext.getExternalContext().getSessionMap().put(CURR_PAGE, currPage);
}
@Override
public void beforePhase(PhaseEvent event) {
//check browser reload and redirect to Main page
FacesContext facesContext = event.getFacesContext();
String requestMethod = ((HttpServletRequest)facesContext.getExternalContext().getRequest()).getMethod();
String currPage = (String) facesContext.getExternalContext().getSessionMap().get(CURR_PAGE);
String newPage = getPageName(facesContext);
if ("GET".equals(requestMethod) && newPage.equals(currPage) && !HOME_PAGE.equals(newPage)) {
try {
facesContext.getExternalContext().redirect(HOME_PATH);
} catch (IOException ex) {
Logger.getLogger(this.getClass()).warn("Can't redirect to Home page", ex);
}
}
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
private String getPageName(FacesContext facesContext) {
String pagePath = facesContext.getExternalContext().getRequestServletPath();
String pageName = pagePath.substring(pagePath.lastIndexOf("/") + 1, pagePath.lastIndexOf(".xhtml"));
return pageName;
}
}
相关问题
- 1. 刷新浏览器?
- 2. 在浏览器刷新中刷新导览面板
- 3. GWT WindowClosingHandler刷新浏览器刷新
- 4. 当浏览器刷新localStorage刷新
- 5. 处理SASS,JS和HTML +浏览器同步/刷新
- 6. 处理浏览器关闭事件和页面刷新
- 7. 在Javascript中检测浏览器刷新
- 8. 浏览器刷新行为
- 9. 跟踪刷新浏览器
- 10. 浏览器刷新asp.net 3.5
- 11. C#刷新浏览器
- 12. 刷新浏览器angular2
- 13. Server.Transfer Vs刷新浏览器
- 14. 在JavaScript中关闭处理浏览器?
- 15. JSF在带有A4J的浏览器中处理服务器端异常
- 16. 多处理浏览器?
- 17. 如何让浏览器在刷新URL时不刷新整页?
- 18. React Router v4在浏览器刷新刷新后登录检查
- 19. 处理在IE和Chrome浏览器
- 20. 在浏览器之外处理Webpack
- 21. JSF和浏览器问题?
- 22. JSF和浏览器返回
- 23. 表单提交浏览器刷新
- 24. Angularjs ngRoute浏览器刷新问题
- 25. Facebook浏览器刷新进入主页
- 26. wordpress网站刷新IE浏览器
- 27. 树莓派刷新浏览器
- 28. 停止Android浏览器被刷新
- 29. 浏览器刷新屏幕尺寸
- 30. python - 使用浏览器模块刷新