我正在使用jsf 2.我在facelet文件中有一个指向外部URL的链接。我当前的视图是/app1/home.xhtml,其中h:commandLink具有类似的操作
<h:commandLink value="#{link}" action="#{action.redirect}" target="_blank"/>
action.redirect重定向到的url是/app2/info.do。但是,似乎JSF尝试将url的扩展名更改为.xhtml。然后失败并显示错误消息。
com.sun.faces.context.FacesFileNotFoundException:/app2/info.xhtml在ExternalContext中找不到作为资源
如何才能正确重定向?
答案 0 :(得分:6)
这里不要使用<h:commandLink>
,这是错误的标签。它旨在提交一个JSF POST表单并导航到一个JSF视图,这两个显然都不希望在这个特定的用例中发生。
只需使用<h:outputLink>
甚至纯HTML <a>
即可。所以,
<h:outputLink value="#{action.redirect}" target="_blank">#{link}</h:outputLink>
或
<a href="#{action.redirect}" target="_blank">#{link}</a>
请注意,两种方法都不需要<h:form>
。