Tim*_*kle 9 jsf parameter-passing valuechangelistener jsf-2
我有一个像这样的litte radiobutton:
<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>
Run Code Online (Sandbox Code Playgroud)
而我的倾听者是这样的:
public void changeanswer(ValueChangeEvent vcEvent) {
System.out.println("comeon= " + vcEvent.getOldValue());
System.out.println("comeon= " + vcEvent.getNewValue());}
Run Code Online (Sandbox Code Playgroud)
我想将一个参数传递给changeanswer方法.例如,我想将questionid传递给changeanswer函数.我需要做一些安排.
我怎样才能做到这一点?
许多人提前多多感谢.
布拉德 - 新秀......
Don*_*gyi 14
您可以使用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>
Run Code Online (Sandbox Code Playgroud)
如果我们假设questionId是一个Integer,那么你可以通过以下方式接收数据:
public void changeanswer(ValueChangeEvent vcEvent) {
Integer questionId =
(Integer) ((UIInput) vcEvent.getSource()).getAttributes().get("myattribute");
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 11
看看组件值是如何绑定的,我敢打赌它在数据表中.如果确实如此,您可以使用DataModel#getRowData()获取当前行.DataModel向TestServicebean 添加属性,如下所示:
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();
// ...
}
Run Code Online (Sandbox Code Playgroud)
并按如下方式更改视图:
<h:dataTable value="#{TestService.questionModel}" var="test">
Run Code Online (Sandbox Code Playgroud)
这就是说,我会建议使用更明智的变量名比TestService,test和change()一样Questionaire,question和changeAnswer()分别.这使代码更加自我记录.
| 归档时间: |
|
| 查看次数: |
17255 次 |
| 最近记录: |