我有两个JSF页面:A.xhtml和B.xhml。
答.xhtml:
<html ...>
<h:body>
<h:form>
<h:commandLink value="To B page" action="#{bean.goToB}">
<f:param name="aURL" value="A.xhtml"/>
</h:commandLink>
</h:form>
</h:body>
</html>
与豆子:
@ManagedBean
@ViewScoped
public class Bean {
public String goToB(){
//some logic...
return "B.xhtml"?faces-redirect=true";
}
}
和 B.xhtml:
<html ...>
<h:body>
<f:metadata>
<f:viewParam name="aURL"/>
</f:metadata>
<h:link value="To A page" outcome="#{aURL}"/> <----- this link is disabled
</h:body>
</html>
上面标记的链接处于非活动状态,已禁用。这是一个简单的标签。为什么我不能从B.xhtml回到A.xhtml?错误在哪里?
基本上是因为您没有传递有效的结果,因此首先尝试将一些有效结果放在没有 xhtml 扩展名的页面名称中,您将看到它呈现为链接。
因此,首先返回操作方法或h:link
中结果的页面名称不得具有 xhtml 扩展名,因此存在 Page1.xhtml操作是 Page1。删除 xhtml 扩展。
其次,当您使用命令链接中的f:param
时,它将成为请求中的一个参数,因此如果您使用 faces-redirect
重定向到另一个页面,它的值将丢失,因为浏览器将发出新请求,因此请删除 faces-redirect。
最后,要获取从f:param
发送的值,请使用预定义的 bean param
,因此:
<h:link value="To A page" outcome="#{param.aURL}"/>
并取下f:metadata
对不起,我在 JSF 页面的名称上犯了这么错误(我写页面.xhtml.xhtml)。
我不必在 link
中的结果中删除 xhtml 扩展名,我不必删除f:metadata
,也不必使用 #{param.aURL}
(我可以使用 #{aURL}
)
感谢大家的帮助(特别是塞萨尔·洛查明和科洛苏斯)。