JSF自动赋值给bean属性

时间:2013-10-04 09:55:17

标签: jsf jsf-2

在视图中,我可以使用什么来自动将固定值分配给bean属性?我使用以下组件提交表单:

<h:commandLink action="#{myDetailController.create}" ... />

所以一切正常,表单已提交。我想自动将1的值分配给myDetailController.selected.number。每次点击链接时,它必须始终为1。如果不在onClick=""中使用<h:сommandLink>,这是否可行?如果没有,您是否可以指定如何在UICommand组件中触发多个操作?

1 个答案:

答案 0 :(得分:3)

其中一种可能性是将<f:setPropertyActionListener>嵌套在<h:commandLink>

<h:commandLink ... >
    <f:setPropertyActionListener value="1" target="#{myDetailController.selected.number}" />
</h:commandLink>

另一种可能性是在操作方法myDetailController.create中添加一行:

selected.setNumber(1);

您可以通过嵌套其他<h:commandLink>标记为您的<f:actionListener>指定尽可能多的动作侦听器,同时记住在actionListener中还有一个指定一个动作侦听器的位置属性<h:commandLink>


在重新阅读您的问题之后,似乎您无法理解您最终想要的内容。您需要的东西不同于固定的1:只有在点击了相关命令链接时才需要将属性设置为1,并在其他条件下设置为0。通过这种方式,您可以区分是否已触发相关命令组件。这是以不同的方式完成的:首先需要检查请求参数映射中是否存在所讨论的命令链接的客户端ID,然后才决定放入什么值。因此,基本上,您的需求可以得到满足通过您视图中的以下行:

<h:commandLink ... >
    <f:setPropertyActionListener value="#{empty param[component.clientId] ? 0 : 1}" 
                                 target="#{myDetailController.selected.number}" />
</h:commandLink>

或在您的操作方法中:

selected.setNumber(context.getExternalContext().getRequestParameterMap().
                           containsKey("formId:commandLinkId" ? 1 : 0);