2010-10-17 12 views
6

मैं इस तरह एक litte radiobutton है गुजरJSF- valuechangelistener के लिए एक पैरामीटर

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

मैं changeanswer विधि के लिए एक पैरामीटर पारित करने के लिए चाहते हैं उदाहरण के लिए मैं प्रश्नावली को परिवर्तन कार्य में पास करना चाहता हूं। मुझे इसमें कुछ व्यवस्था करने की ज़रूरत है।

मैं यह कैसे कर सकता हूं?

अग्रिम में बहुत से धन्यवाद।

ब्रैड - रुकी ..

उत्तर

10

देखकर कैसे घटक मूल्यों बाध्य कर रहे हैं, मुझे यकीन है कि यह एक datatable अंदर क्या है। यदि यह वास्तव में मामला है, तो आप वर्तमान पंक्ति प्राप्त करने के लिए DataModel#getRowData() का उपयोग कर सकते हैं। TestService सेम के लिए एक DataModel संपत्ति जोड़ें इस प्रकार की तरह:

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 की तुलना में अधिक समझदार चर नाम का उपयोग करने के सुझाव देंगे , test और change(), Questionaire, question और changeAnswer() क्रमशः। यह कोड को अधिक आत्म-दस्तावेज बनाता है।

+0

आप बिल्कुल सही हैं। यह एक डाटाटेबल था। और आपने मेरा सप्ताह बचाया। धन्यवाद नायक! –

+0

आपका स्वागत है। – BalusC

+0

वह बहुत उपयोगी बालूसी था! आपका बहुत बहुत धन्यवाद! :) मुझे नहीं पता था कि डेटामोडेल क्लास की तरह कुछ मौजूद है !!! यह बहुत उपयोगी है! ब्रैड के प्रश्न के लिए +1 भी। – Nikhil

7

आप च उपयोग कर सकते हैं: विशेषता टैग 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");