我最近开始做一些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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top