0

我想使用带有下表的 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>

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

4

2 回答 2

1

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

Map<ItemClass, Integer> ratePerItem;

这样,您必须遍历地图寻找值。满足您需求的一种更简单的方法可能是使用h:inputHidden存储项目的 a 。

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

于 2012-09-18T14:12:02.793 回答
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>
于 2012-09-19T09:09:05.500 回答