gpt4 book ai didi

JSF commandLink,POST和后退按钮

转载 作者:行者123 更新时间:2023-12-04 18:54:23 25 4
gpt4 key购买 nike

我最近开始做一些JSF工作-在此之前,我一直使用PHP或Python进行Web开发。

当我发现使用h:commandLink标记时,JSF使用HTTP POST进行导航时,我感到有些惊讶。

我一直在使用commandLink,因为这显然是构建JSF应用程序的正确方法。为什么JSF使用POST进行导航? GET有什么问题?我只能假设JSF为onclick事件自动生成的Javascript可能超过GET请求的最大长度。

我已经有许多使用h: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 commandLink,POST和后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1227553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com