2010-10-17 28 views
6

Böyle bir litte RadioButton var valuechangelistener geçerekJSF- bir parametre

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

Ben changeanswer yöntemine parametre geçirmek istiyorum .Örneğin, sorgusu changeanswer işlevine iletmek istiyorum. İçinde bazı düzenlemeler yapmalıyım.

Bunu nasıl yapabilirim?

Şimdiden çok teşekkürler.

Brad - komponent değerleri bağlıdırlar böyle gördükçe Rookie ..

cevap

10

, ben bir datatable içeride bahse. Bu durumda, geçerli satırı almak için DataModel#getRowData() kullanabilirsiniz.

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(); 
    // ... 
} 

ve aşağıdaki gibi görünümünü değiştirmek: aşağıdaki gibi TestService fasulye için DataModel Özellik ekle söyledi


<h:dataTable value="#{TestService.questionModel}" var="test"> 
, ben TestService daha mantıklı değişken adlarını kullanmak için öneririm Sırasıyla Questionaire, question ve changeAnswer() gibi test ve change(). Bu, kodu daha kendinden belgelendirir.

Sen f kullanabilirsiniz
+0

Kesinlikle haklısınız. Bir veritabaydı. Ve sen haftayı kurtardın. Teşekkürler kahraman! –

+0

Rica ederim. – BalusC

+0

Bu ÇOK ÇOK yardımcı oldu BaluC! Çok teşekkürler! :) DataModel sınıfı gibi bir şey olduğunu bilmiyordum !!! Bu çok kullanışlı! Brad'in sorusu için +1 de. – Nikhil

7

:

public void changeanswer(ValueChangeEvent vcEvent) { 
    Integer questionId = 
    (Integer) ((UIInput) vcEvent.getSource()).getAttributes().get("myattribute"); 
: Biz o zaman Eğer verileri aşağıdaki şekilde alabilirsiniz, QuestionID bir tamsayı olduğunu varsayalım Eğer

<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> 

: ValueChangeListener herhangi bir veri göndermek için özellik etiketi