我想使用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>
我现在面临的问题:我需要确定哪个项目实际上已被评级。有人能给我一个如何实现这个目标的提示吗?
答案 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>