gpt4 book ai didi

jsf-2 - 使用 h :commandButton -- or the equivalent 传递参数

转载 作者:行者123 更新时间:2023-12-02 08:52:45 38 4
gpt4 key购买 nike

我在其他线程上读到这不起作用:

<h:commandButton value="Create New Account" 
action="#{acctBean.doCreate}" >
<f:param name="acctName" value="#{acctBean.handle}" />
<f:param name="acctNo" value="#{acctBean.id}" />
</h:commandButton>

如果创建帐户,doCreate() 方法将返回导航到“祝贺”页面。然后目标页面可以解析 #{param.handle}#{param.id}

我知道如果我使用 h:commandLink 代替,这会起作用,但我想要一个按钮,而不是链接。有没有普遍接受的方法来做到这一点?

更新:

根据@BalusC的第一个答案,我创建了以下测试代码:

<h:commandButton value="Push Me" action="goAcctCreated" >
<f:param name="acctName" value="This Is Account Name" />
<f:param name="acctNo" value="1234" />
</h:commandButton>
<h:button value="Push Me #2" outcome="newAcct" >
<f:param name="acctName" value="This Is Account Name" />
<f:param name="acctNo" value="1234" />
</h:button>

在目标页面中我有:

<p>You may now log in with the account you just created: <b>#{param['acctName']}</b>.</p>
<p>This is account number <b>#{param['acctNo']}</b>.</p>

和以前一样,h:commandButton 不适用于 POST 事务,正如 BalusC 所说,h:button 执行 GET 并确实有效。

有趣的是,在 h:commandbutton 执行的 POST 上,它具有编码的参数,如 Firebug 所见:

acctName    This Is Account Name
acctNo 1234
javax.faces.ViewState 8642267042811824055:-4937858692781722161
testForm testForm
testForm:j_idt55 testForm:j_idt55

因此,f:param 标记至少完成了其工作,但目标页面无法解析 EL 表达式#{param[xxx]}。它们也不会出现在作用域变量报告中(ctrl-shift-D)。我应该在目标页面上执行某些操作吗?

最佳答案

这在 JSF 2.x 上应该工作得很好。你自己尝试过吗?如果它不起作用,那么您要么实际上使用 JSF 1.x,要么在 POST 之后发送重定向。

您所指的其他线程无疑是在谈论 JSF 1.x,当 <f:param> <h:commandButton> 确实不支持。在 JSF 1.x 上,您可能会使用 <f:setPropertyActionListener>而是使用 CSS 的一些镜头来设置 <h:commandLink> 的样式看起来像一个按钮。

例如

<h:commandLink styleClass="button" ...>

a.button {
display: inline-block;
background: lightgray;
border: 1px outset lightgray;
outline: none;
color: black;
text-decoration: none;
cursor: default;
}
a.button:active {
border-style: inset;
}

请注意,在 JSF 2.x 中,您还有机会使用新的 <h:button> 它会触发 GET 请求而不是 POST 请求。如果您不需要执行任何 bean 操作(即您当前的操作只是返回简单的导航案例结果)并且希望请求具有幂等性,那么这会更好。

<h:button value="Create New Account" outcome="create">
<f:param name="acctName" value="#{acctBean.handle}" />
<f:param name="acctNo" value="#{acctBean.id}" />
</h:button>

这将导航至create.xhtml使用请求 URL 中的给定参数。

关于jsf-2 - 使用 h :commandButton -- or the equivalent 传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7366480/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com