【问题标题】:How can I add parameter to POST request from h:commandLink?如何将参数添加到来自 h:commandLink 的 POST 请求?
【发布时间】:2013-12-24 01:06:55
【问题描述】:

我有两个 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>

用豆子:

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

【问题讨论】:

  • name="aURL" 不会将参数绑定到任何东西。它只是命名它。你想要param.aURL,它从请求中选择命名参数

标签: jsf post jsf-2 parameters navigation


【解决方案1】:

基本上这是因为您没有传递有效的结果,所以首先尝试将一些有效的结果放在不带 xhtml 扩展名的页面名称中,您将看到它呈现为链接。

所以首先返回动作方法的页面名称或h:link 中的结果不能有xhtml 扩展名,所以有一个Page1.xhtml 动作是Page1。删除 xhtml 扩展名。

其次,当您在命令链接中使用f:param 时,它将成为请求中的一个参数,因此如果您使用faces-redirect 重定向到另一个页面,它的值将丢失,因为浏览器将发出新请求,所以删除面孔重定向。

最后要获取从f:param 发送的值,请使用预定义的bean param 所以:

<h:link value="To A page" outcome="#{param.aURL}"/>

并删除f:metadata

【讨论】:

    【解决方案2】:

    对不起,我把 JSF 页面的名字弄错了(我写 page.xhtml.xhtml)。

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

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

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 2016-10-17
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多