Jsf Forward方法是在页面加载时触发的,而不是在链接点击时触发的

Jsf Forward方法是在页面加载时触发的,而不是在链接点击时触发的,jsf,prettyfaces,Jsf,Prettyfaces,在调试过程中,我注意到当我被转发到包含下面漂亮链接的home.xhtml页面时,方法myBean.forward()被触发,甚至在单击漂亮链接(即产品标签)之前: home.xhtml <pretty:link target="_self" mappingId="#{myBean.forward(product, true)}" > <f:param value="#{vo.product.hash }" /> <ice

在调试过程中,我注意到当我被转发到包含下面漂亮链接的home.xhtml页面时,方法
myBean.forward()
被触发,甚至在单击漂亮链接(即产品标签)之前:

home.xhtml

<pretty:link target="_self" mappingId="#{myBean.forward(product, true)}"  >
       <f:param value="#{vo.product.hash }" />        
       <ice:outputText value="#{vo.product.label}"/>
</pretty:link>

有人能解释一下为什么会发生这种情况,以及如何避免这种情况(即,只有在点击链接时才应该触发该方法)。谢谢。

您似乎正在将JSF ValueExpression绑定到
组件,但此组件的ValueExpression将在页面呈现时进行计算

这是因为
组件旨在创建一个URL,该URL在浏览器中呈现以允许书签,而无需调用JSF来执行方法。这意味着您无法在运行时动态更改
的值

您最好使用
(它在回发时执行操作方法,单击时,而不是呈现时),然后您可以从操作方法执行服务器端导航,因为这似乎是您所期望的行为


基本上,
的设计目的与您想要的正好相反。

这正是我最终要做的。为了避免这个问题,我不得不使用。谢谢你的反馈:)很高兴你弄明白了:)
<url-mapping id="myApp/seller/addProduct">
        <pattern value="/myApp/seller/addProduct/#{fooBean.productHash}" />
        <view-id value="/pages/seller/products/addProduct.xhtml" />
        <action>#{myBean.myMethod}</action>          
</url-mapping>
public class MyBean{
    //source code omitted
    public String forward(Product p, boolean pretty){

        if(prettyLink)  
           return "myApp/seller/addProduct";    
        else 
           return fooBean.getContextService().getBaseURL()+"/myApp/seller/addProduct/"+p.getHash();

  }
}