代码之家  ›  专栏  ›  技术社区  ›  Tim Tuckle

JSF-将参数传递给valuechangelistener

  •  9
  • Tim Tuckle  · 技术社区  · 14 年前

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

    <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函数。我需要做些安排。

    我该怎么做?

    很多很多很多很多提前感谢。

    布拉德-新秀。。

    2 回复  |  直到 14 年前
        1
  •  11
  •   BalusC    14 年前

    看到组件值是如何绑定的,我敢打赌它在一个数据表中。如果确实如此,您可以使用 DataModel#getRowData() 获取当前行。添加 DataModel 财产 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">
    

    也就是说,我建议使用比 测试服务 , test change() Questionaire , question changeAnswer() 分别是。这使得代码更具自文档性。

        2
  •  16
  •   Donato Szilagyi    12 年前

    您可以使用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是一个整数,那么您可以通过以下方式接收数据:

    public void changeanswer(ValueChangeEvent vcEvent) { 
      Integer questionId =
        (Integer) ((UIInput) vcEvent.getSource()).getAttributes().get("myattribute");