बलुस की टिप्पणी पढ़ने के बाद मैं इस पोस्ट को फिर से अपडेट कर रहा हूं।
मैंने एक छोटा डेमो एप्लिकेशन बनाया और चरणों को देखने के लिए और जब रूपांतरण और सत्यापन होता है।
दृश्य:
<h:form>
<h:inputText value="#{demoBean.field}">
<f:converter converterId="demoConverter"/>
<f:validator validatorId="demoValidator"/>
</h:inputText>
<h:commandButton value="Submit" action="#{demoBean.demoAxn()}"/>
</h:form>
प्रबंधित सेम:
@ManagedBean
@SessionScoped
public class DemoBean implements Serializable {
private String field;
public DemoBean() {
System.out.println(Thread.currentThread().getStackTrace()[1]);
}
public String getField() {
System.out.println(Thread.currentThread().getStackTrace()[1]);
return field;
}
public void setField(String field) {
System.out.println(Thread.currentThread().getStackTrace()[1]);
this.field = field;
}
public String demoAxn() {
System.out.println(Thread.currentThread().getStackTrace()[1]);
return null;
}
}
कनवर्टर:
@FacesConverter(value="demoConverter")
public class DemoConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
System.out.println(Thread.currentThread().getStackTrace()[1]);
return value;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
System.out.println(Thread.currentThread().getStackTrace()[1]);
return (String) value;
}
}
सत्यापनकर्ता:
@FacesValidator(value="demoValidator")
public class DemoValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
System.out.println(Thread.currentThread().getStackTrace()[1]);
}
}
चरण श्रोता:
public class DemoPhaseListener implements PhaseListener {
@Override
public void afterPhase(PhaseEvent event) {
System.out.println(Thread.currentThread().getStackTrace()[1]);
System.out.println("PhaseId: " + event.getPhaseId() + " ===============================\n\n");
}
@Override
public void beforePhase(PhaseEvent event) {
System.out.println("\n\nPhaseId: " + event.getPhaseId() + " ===============================");
System.out.println(Thread.currentThread().getStackTrace()[1]);
}
@Override
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
}
चरण श्रोता पंजीकरण दिनांक: उस सेटिंग के साथ
<lifecycle>
<phase-listener>pkg.DemoPhaseListener</phase-listener>
</lifecycle>
जब "भेजें" बटन क्लिक किया जाता है, उत्पादन होता है:
INFO: PhaseId: RESTORE_VIEW 1 ===============================
INFO: pkg.DemoPhaseListener.beforePhase(DemoPhaseListener.java:17)
INFO: pkg.DemoPhaseListener.afterPhase(DemoPhaseListener.java:10)
INFO: PhaseId: RESTORE_VIEW 1 ===============================
INFO: PhaseId: APPLY_REQUEST_VALUES 2 ===============================
INFO: pkg.DemoPhaseListener.beforePhase(DemoPhaseListener.java:17)
INFO: pkg.DemoPhaseListener.afterPhase(DemoPhaseListener.java:10)
INFO: PhaseId: APPLY_REQUEST_VALUES 2 ===============================
INFO: PhaseId: PROCESS_VALIDATIONS 3 ===============================
INFO: pkg.DemoPhaseListener.beforePhase(DemoPhaseListener.java:17)
INFO: pkg.DemoConverter.getAsObject(DemoConverter.java:13)
INFO: pkg.DemoValidator.validate(DemoValidator.java:14)
INFO: pkg.DemoBean.getField(DemoBean.java:17)
INFO: pkg.DemoPhaseListener.afterPhase(DemoPhaseListener.java:10)
INFO: PhaseId: PROCESS_VALIDATIONS 3 ===============================
INFO: PhaseId: UPDATE_MODEL_VALUES 4 ===============================
INFO: pkg.DemoPhaseListener.beforePhase(DemoPhaseListener.java:17)
INFO: pkg.DemoBean.setField(DemoBean.java:22)
INFO: pkg.DemoPhaseListener.afterPhase(DemoPhaseListener.java:10)
INFO: PhaseId: UPDATE_MODEL_VALUES 4 ===============================
INFO: PhaseId: INVOKE_APPLICATION 5 ===============================
INFO: pkg.DemoPhaseListener.beforePhase(DemoPhaseListener.java:17)
INFO: pkg.DemoBean.demoAxn(DemoBean.java:27)
INFO: pkg.DemoPhaseListener.afterPhase(DemoPhaseListener.java:10)
INFO: PhaseId: INVOKE_APPLICATION 5 ===============================
INFO: PhaseId: RENDER_RESPONSE 6 ===============================
INFO: pkg.DemoPhaseListener.beforePhase(DemoPhaseListener.java:17)
INFO: pkg.DemoBean.getField(DemoBean.java:17)
INFO: pkg.DemoConverter.getAsString(DemoConverter.java:20)
INFO: pkg.DemoPhaseListener.afterPhase(DemoPhaseListener.java:10)
INFO: PhaseId: RENDER_RESPONSE 6 ===============================
लेकिन जब मेकअप परिवर्तन निम्नानुसार कनवर्टर में एनपीई फेंकने के लिए:
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
System.out.println(Thread.currentThread().getStackTrace()[1]);
throw new NullPointerException();
}
उत्पादन होता है:
INFO: PhaseId: RESTORE_VIEW 1 ===============================
INFO: pkg.DemoPhaseListener.beforePhase(DemoPhaseListener.java:17)
INFO: pkg.DemoPhaseListener.afterPhase(DemoPhaseListener.java:10)
INFO: PhaseId: RESTORE_VIEW 1 ===============================
INFO: PhaseId: APPLY_REQUEST_VALUES 2 ===============================
INFO: pkg.DemoPhaseListener.beforePhase(DemoPhaseListener.java:17)
INFO: pkg.DemoPhaseListener.afterPhase(DemoPhaseListener.java:10)
INFO: PhaseId: APPLY_REQUEST_VALUES 2 ===============================
INFO: PhaseId: PROCESS_VALIDATIONS 3 ===============================
INFO: pkg.DemoPhaseListener.beforePhase(DemoPhaseListener.java:17)
INFO: pkg.DemoConverter.getAsObject(DemoConverter.java:13)
INFO: pkg.DemoPhaseListener.afterPhase(DemoPhaseListener.java:10)
INFO: PhaseId: PROCESS_VALIDATIONS 3 ===============================
INFO: pkg.DemoBean.getField(DemoBean.java:17)
लेकिन स्टैकट्रेस जिसके परिणामस्वरूप दृश्य पर प्रदर्शित होता है।
धन्यवाद @ बाल्लूसी। बहुत बाद में आने के बावजूद और मूल रूप से βнɛƨн Ǥʋяʋиɢ के उत्तर (जिसे मैंने स्वीकार किया था) से जुड़ी लंबी बातचीत को संक्षेप में सारांशित करने के बावजूद, मैं इस सवाल पर आने वाले अन्य लोगों के लाभ के लिए स्वीकार्य रूप से सबसे उपयोगी उत्तर होगा। क्षमा करें βнɛƨн Ǥʋяʋиɢ :( –
आपका स्वागत है। कृपया ध्यान दें कि मैंने आपके सत्यापनकर्ता कार्यान्वयन पर नज़र डालने के बाद उत्तर को अपडेट किया है जो अनिवार्य रूप से गलत भी है। – BalusC
@ बालससी: मुझे सही करने के लिए धन्यवाद। चूंकि, पूरी तरह से भ्रामक मैं संपादन कर रहा हूं मेरा उत्तर –