带有单选按钮的JSF dataTable

时间:2012-09-18 14:02:29

标签: jsf datatable radio-button

我想使用JSF创建一个带有下表的网页:

Item 1 | ( ) good ( ) ok ( ) bad
Item 2 | ( ) good ( ) ok ( ) bad
Item 3 | ( ) good ( ) ok ( ) bad
[…]

选中单选按钮后,我立即想要提交并处理评级。 dataTable的当前代码如下所示:

<h:dataTable value="#{bean.list}" var="item">
    <h:column>
        <h:outputText value="#{item.title}"/>
    </h:column>
    <h:column>
        <h:form>
        <h:selectOneRadio id="rate" value="#{bean.rate}">
            <f:selectItem itemValue="1" itemLabel="good" />
            <f:selectItem itemValue="0" itemLabel="ok" />
            <f:selectItem itemValue="-1" itemLabel="bad" />
            <f:ajax event="click" execute="rate" />
        </h:selectOneRadio>
        </h:form>
    </h:column>
</h:dataTable>

我现在面临的问题:我需要确定哪个项目实际上已被评级。有人能给我一个如何实现这个目标的提示吗?

2 个答案:

答案 0 :(得分:1)

您可以选择多种技巧。例如,您可以在bean中使用Map <h:selectOneRadio value="#{bean.ratePerItem[item]}"

Map<ItemClass, Integer> ratePerItem;

这样你必须走遍地图寻找价值观。根据您的需求采用更简单的方法可能是使用存储项目的h:inputHidden

或者,或许更好,f:setPropertyActionListener。这取决于你到底想要什么。

答案 1 :(得分:0)

将“rate”属性添加到Item类将帮助您轻松确定哪个Item被评级。

<h:selectOneRadio id="rate" value="#{bean.rate}"
            <f:selectItem itemValue="1" itemLabel="good" />
            <f:selectItem itemValue="0" itemLabel="ok" />
            <f:selectItem itemValue="-1" itemLabel="bad" />
            <f:ajax event="click" execute="rate" />
        </h:selectOneRadio>

将上述代码更改为

<h:selectOneRadio id="rate" value="#{item.rate}">
            <f:selectItem itemValue="1" itemLabel="good" />
            <f:selectItem itemValue="0" itemLabel="ok" />
            <f:selectItem itemValue="-1" itemLabel="bad" />
            <f:ajax event="click" execute="rate" />
        </h:selectOneRadio>