JSF commandLink,发布和后退按钮
-
22-07-2019 - |
题
我最近开始做一些JSF的工作 - 在此之前,我一直使用PHP或者Python Web开发
。我有些惊奇地发现,JSF使用HTTP POST的当H导航:commandLink标签被用来
我已经使用commandLink因为这是显然构建JSF应用的正确方法。为什么JSF使用POST导航?出了什么问题得到什么?我只能假设是自动的JSF的onclick事件产生的可能的Javascript超过GET请求的最大长度。
我已经有许多正在使用ħ导航网页:commandLink。直到我使用浏览器的后退按钮这工作井。我应该如何去在JSF处理后退按钮?
我挣扎理解为什么JSF是围绕打造POST。它打破了书签,回寻呼和让你的网页在搜索引擎索引的能力。
解决方案
这是不会帮助你建立在客户端上的一个链接,但要注意的 outputLink的。
有用于导航规则重定向元件,其可以帮助一些刷新的问题。
<navigation-rule>
<display-name>navBack</display-name>
<from-view-id>/navBack.jsp</from-view-id>
<navigation-case>
<from-outcome>navTo</from-outcome>
<to-view-id>/navTo.jsp</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
如果一切都失败了,你可以做自己的重定向URL,因为在这个动作:
public String doAction() {
System.out.println("Did some non-idempotent operation");
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
Application app = context.getApplication();
ViewHandler viewHandler = app.getViewHandler();
String url = viewHandler.getActionURL(context, "/navTo.jsp");
url = url + (url.indexOf('?') < 0 ? '?' : '+') + "foo=bar";
url = extContext.encodeResourceURL(url);
try {
extContext.redirect(url);
} catch (IOException e) {
throw new FacesException(e);
}
return null;
}
注意事项:我不记得,如果我正确编码的URL
。各种第三方库添加不同的特征生产过剩。我不知道如果说有什么在JSF 2.0在这方面已经完成,但它可能是值得一试。
其他提示
烨。 JSF是围绕POST建,它是关于JSF的最大症结之一。看一看的JAX-RS /煤层或Spring作书签GETable页。
由于BalusC他博客说,GET应该用于页面之间的导航。
使用h:outputLink
进行导航。
您可以阅读他的PostRedirectGetListener,它会解决回/刷新重新提交表单确认消息。
我建议你添加以下,以处理局部AJAX处理(如果相关)到beforePhase
:
if(event.getFacesContext().getPartialViewContext().isAjaxRequest())
{
return;
}
不隶属于 StackOverflow