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



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

感谢大家的帮助(特别是塞萨尔·洛查明和科洛苏斯)。

相关内容

  • 没有找到相关文章

最新更新