JSF 2.2中URL不更新问题是否仍存在?测试中URL始终更新
JSF 2.2 导航中URL更新问题的解惑
先给你理清核心误区:你用的<h:link>组件从本质上就和你想测试的「服务器端转发/重定向」不是一回事,这才导致你看到URL始终更新的结果。
先明确组件特性
<h:link>是JSF专门用来生成纯客户端HTML超链接的组件,不管是JSF 2.0还是2.2,它的行为都是一致的——渲染后就是普通的<a>标签,点击后直接触发浏览器的GET请求跳转到目标页面,这种场景下URL肯定会更新,和服务器端的导航逻辑无关。
关于你提到的JSF 2.0「URL不更新」的场景
你看到的资料里说的URL不更新,指的是**服务器端页面转发(Forward)**的情况,比如用<h:commandButton>这类触发POST请求的组件,配合默认的导航规则(不设置重定向参数):
- 当用户点击按钮,浏览器发送POST请求到服务器;
- 服务器直接把目标页面的内容返回给浏览器,整个过程浏览器没有发起新的GET跳转,所以URL会保持原来的请求地址,不会更新。
这个特性在JSF 2.2里完全没有改变,并不是资料过时了,只是你选错了测试组件而已。
验证JSF 2.2的转发(URL不更新)场景
把你的测试代码改成用<h:commandButton>试试:
<h:form> <h:commandButton action="detail" value="触发服务器端转发"/> </h:form>
点击这个按钮后,你会发现浏览器URL还是停留在页面1的地址,但内容已经变成详情页的了——这就是你要找的URL不更新的转发场景。如果想要强制重定向(URL更新),只需要把action改成action="detail?faces-redirect=true"就行。
总结
- JSF 2.0里的服务器端转发(URL不更新)特性在2.2中依然存在,你的资料没过时;
- 你用
<h:link>测试的是客户端GET跳转,这种场景下URL必然更新,属于正常行为,和服务器端导航的转发/重定向逻辑是两个不同的概念。
内容的提问来源于stack exchange,提问作者gogogaga
相关产品推荐
相关产品推荐

