11

我有一个像这样的小单选按钮:

<h:selectOneRadio value="#{test.answer}" valueChangeListener="#{TestService.changeanswer}" immediate="true" id="answer">
 <f:selectItem  itemValue="A" itemLabel="Absolutely True"/>
 <f:selectItem  itemValue="B" itemLabel="True"/>
 <f:selectItem  itemValue="C" itemLabel="Partially True"/>
 <f:selectItem  itemValue="D" itemLabel="Not True"/>
 <f:selectItem  itemValue="E" itemLabel="Definitely Not True"/>
 <f:ajax event="change" process="answer"></f:ajax></h:selectOneRadio>

我的听众是这样的:

public void changeanswer(ValueChangeEvent vcEvent) { 
System.out.println("comeon= " + vcEvent.getOldValue()); 
System.out.println("comeon= " + vcEvent.getNewValue());}

我想将参数传递给 changeanswer 方法。例如,我想将 questionid 传递给 changeanswer 函数。我需要在里面做一些安排。

我怎样才能做到这一点?

很多很多提前感谢。

布拉德 - 新秀..

4

2 回答 2

20

您可以使用 f:attribute 标记将任何数据发送到 ValueChangeListener:

<h:selectOneRadio value="#{test.answer}"
                  valueChangeListener="#{TestService.changeanswer}"
                  immediate="true" id="answer">
    <f:attribute name="myattribute" value="#{test.questionid}" />
    <f:selectItem  itemValue="A" itemLabel="Absolutely True"/>
    ...
</h:selectOneRadio>

如果我们假设 questionId 是一个 Integer,那么您可以通过以下方式接收数据:

public void changeanswer(ValueChangeEvent vcEvent) { 
  Integer questionId =
    (Integer) ((UIInput) vcEvent.getSource()).getAttributes().get("myattribute");
于 2012-12-15T21:08:16.597 回答
11

看到组件值是如何绑定的,我敢打赌它在数据表中。如果确实如此,您可以使用DataModel#getRowData()获取当前行。DataModel向bean添加一个属性,TestService如下所示:

private List<Question> questions;
private DataModel<Question> questionModel;

@PostConstruct
public void init() {
    questions = getItSomehow();
    questionModel = new ListDataModel<Question>(questions);
}

public void change(ValueChangeEvent event) {
    Question currentQuestion = questionModel.getRowData();
    // ...
}

并将视图更改如下:

<h:dataTable value="#{TestService.questionModel}" var="test">

也就是说,我建议分别使用比TestService, testand change(), likeQuestionairequestionand更合理的变量名changeAnswer()。这使代码更具自我记录性。

于 2010-10-17T20:07:26.883 回答