4

我有一个 a4j:commandButton,它应该基于我想作为参数传递的 Id 将我重定向到适当的“编辑”页面,如下所示:

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

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

<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");
}
4

2 回答 2

6

看看这篇关于 JSF 中通信的文章,作者BalusC

f:param仅适用于h:commandLinkand h: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 将链接“绘制”为按钮。

于 2010-07-19T11:44:58.407 回答
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之类的隐藏字段技术

于 2010-07-19T13:18:15.620 回答