使用h:commandButton传递参数

Mat*_*zyk 4 jsf parameter-passing jsf-2 commandbutton

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

<h:commandButton action="/details.jsf?faces-redirect=true" value="details">
    <f:attribute name="id" value="#{bean.id}" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

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

<h:outputLink  value="/details.jsf">
    link
    <f:param name="id" value="#{bean.id}" />
</h:outputLink>
Run Code Online (Sandbox Code Playgroud)

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

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

@PostConstruct
public void init(){
    id= resolve("id");
}
Run Code Online (Sandbox Code Playgroud)

pak*_*ore 6

请看一下BalusC关于JSF中的通信的这篇文章

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>
Run Code Online (Sandbox Code Playgroud)

然后在你的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>
Run Code Online (Sandbox Code Playgroud)

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

或者尝试通过CSS将链接"绘制"为按钮.