Ste*_*dge 5 jsf post commandlink
我最近开始做一些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>
Run Code Online (Sandbox Code Playgroud)
如果所有其他方法均失败,您可以自己执行重定向 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;
}
Run Code Online (Sandbox Code Playgroud)
注意事项:我不记得 URL 编码是否正确。
各种第三方库添加了不同的过剩功能。我不确定 JSF 2.0 是否在这方面做了什么,但可能值得一看。
| 归档时间: |
|
| 查看次数: |
5389 次 |
| 最近记录: |