使用h:commandButton传递参数

时间:2010-07-19 11:39:57

标签: jsf jsf-2 parameter-passing commandbutton

我有一个a4j:commandButton应该根据Id将我重定向到适当的“编辑”页面,我希望将其作为参数传递,如下所示:

<h:commandButton action="/details.jsf?faces-redirect=true" value="details">
    <f:attribute name="id" value="#{bean.id}" />
</h:commandButton>

问题是,它不起作用。我也尝试用“f:param name =”id“value =”#{bean.id}“”替换f:attribute,但它也失败了。我唯一能做的就是输出链接:

<h:outputLink  value="/details.jsf">
    link
    <f:param name="id" value="#{bean.id}" />
</h:outputLink>

但是我对链接并不满意,所以有没有办法使commandButton工作?

哦,我还有一个bean,它应该在重定向后获得“id”:

@PostConstruct
public void init(){
    id= resolve("id");
}

2 个答案:

答案 0 :(得分:6)

通过this article

查看有关JSF通信的BalusC

f:param仅适用于h:commandLinkh:outputLink

您可以使用隐藏的输入:

<h:form>
    <h:commandButton action="/details.jsf?faces-redirect=true" value="details"/>
    <input type="hidden" name="id" value="#{bean.id}" />
</h:form>

然后在你的faces-config中,我猜是请求作用域。如果您使用JSF2的注释,只需将其转换为正确的注释。

<managed-bean>
    <managed-bean-name>bean</managed-bean-name>
    <managed-bean-class>mypackage.Bean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>id</property-name>
        <value>#{param.id}</value>
    </managed-property>
</managed-bean>

显然,你需要在辅助bean中为该字段设置getter和setter。

或尝试通过CSS将链接“绘制”为按钮。

答案 1 :(得分:1)

除非我的JSF非常生疏,否则命令按钮或命令链接上的action属性用于指定faces-config-nav文件中定义的结果字符串,或者它应指向将返回的bean上的方法结果(或重定向/无论如何)。

在您的情况下,如果您想要重定向到另一个页面......您应该在配置文件中将其定义为导航链接(必要时使用redirect)。然后在你的动作按钮中你应该有类似

的东西
<h:commandButton action="showDetails" value="details">

...

<navigation-case>
        <from-outcome>showDetails</from-outcome>
        <to-view-id>/details.jsf?faces-redirect=true</to-view-id>
</navigation-case>

另外,<f:atribute>标记可以使用,但它只会将属性设置到组件上。因此,如果您掌握了bean中的命令按钮,则可以按名称获取属性值。要传递请求参数,请使用隐藏的字段技术,如 pakore 提到的