我有一个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");
}
答案 0 :(得分:6)
f:param
仅适用于h:commandLink
和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将链接“绘制”为按钮。
答案 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 提到的