如何从h:commandLink向POST请求添加参数?

时间:2013-12-24 01:06:56

标签: jsf post jsf-2 parameters navigation

我有两个JSF页面:A.xhtml和B.xhml。

A.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>

with bean:

@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?错误在哪里?

2 个答案:

答案 0 :(得分:2)

基本上是因为你没有传递有效的结果,所以首先尝试将一些有效的结果放在没有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

答案 1 :(得分:0)

对不起,我在JSF页面上犯了这么大的错误(我写了page.xhtml.xhtml)。

我不必在link的结果中删除xhtml扩展名,我不必删除f:metadata而我不必使用#{param.aURL}(我可以使用#{aURL}

感谢大家的帮助(尤其是CésarLoachamin和kolossus)。