मुझे एपी के साथ एक समस्या है: selectOneMenu, कोई फर्क नहीं पड़ता कि मैं क्या करूं जेएसएफ इकाई पर सेटर को कॉल करने के लिए जेएसएफ नहीं मिल सकता है। जेएसएफ सत्यापन इस संदेश के साथ विफल रहता है:
फ़ॉर्म: स्थान: सत्यापन त्रुटि: मान मान्य नहीं है
मेरे पास एक ही प्रकार के कई अन्य वर्ग पर काम कर रहा है (यानी, टेबल क्लासेस ज्वाइन करें) लेकिन मेरे जीवन के लिए यह एक काम नहीं हो सकता।
यदि कोई इस तरह की समस्या के लिए कुछ समस्या निवारण / डिबगिंग युक्तियां फेंक सकता है, तो इसकी बहुत सराहना की जाएगी।
लॉग स्टेटमेंट्स का उपयोग करके मैंने निम्नलिखित को सत्यापित किया है:
Conveter
सही, गैर लौटने हैnull
मान।- मेरी जेपीए संस्थाओं में कोई बीन मान्यता नहीं है।
- सेटर
setLocation(Location location)
कभी नहीं कहा जाता है।
यह सबसे सरल उदाहरण है जो मैं कर सकता हूं और यह बस काम नहीं करेगा:
<h:body>
<h:form id="form">
<p:messages id="messages" autoUpdate="true" />
<p:selectOneMenu id="location" value="#{locationStockList.selected.location}" converter="locationConverter">
<p:ajax event="change" update=":form:lblLocation"/>
<f:selectItems value="#{locationStockList.locationSelection}"/>
</p:selectOneMenu>
</h:form>
</h:body>
कनवर्टर:
@FacesConverter(forClass=Location.class, value="locationConverter")
public class LocationConverter implements Converter, Serializable {
private static final Logger logger = Logger.getLogger(LocationConverter.class.getName());
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value.isEmpty())
return null;
try {
Long id = Long.parseLong(value);
Location location = ((LocationManagedBean) context.getApplication().getELResolver().getValue(context.getELContext(), null, "location")).find(id);
logger.log(Level.SEVERE, "Converted {0} to {1}" , new Object[] {value, location});
return location;
} catch (NumberFormatException e) {
return new Location();
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null || value.toString().isEmpty() || !(value instanceof Location))
return "";
return String.valueOf(((Location) value).getId());
}
}
कंसोल आउटपुट:
// Getter method
INFO: Current value=ejb.locations.Location[id=null, name=null, latitude=0.0, longitude=0.0]
// Session Bean
INFO: Finding ejb.locations.Location with id=3
// Session Bean
INFO: ### Returning : ejb.locations.Location[id=3, name=mdmd, latitude=4.5, longitude=2.3]
// Converter
SEVERE: Converted 3 to ejb.locations.Location[id=3, name=mdmd, latitude=4.5, longitude=2.3]
// Getter method -> Where did my selected Location go ??
INFO: Current value=ejb.locations.Location[id=null, name=null, latitude=0.0, longitude=0.0]
equals
जाँच होती है। मेरी स्थिति थोड़ी जटिल है। मैं अपना स्वयं का कस्टम घटक बनाता हूं जो उपयोगकर्ता को जटिल रेडियो लेआउट रखने की अनुमति देता है। यह ठीक काम करता है अगर मेरे पास सिर्फ एक रेडियो समूह है (f: selectItems सही मेरे कस्टम घटक के नीचे)। हालाँकि, लेआउट अधिक जटिल हो जाता है (कई रेडियो समूह, प्रत्येक का अपना f: selectItems होता है, लेकिन सभी समान चयन साझा करते हैं), मुझे f: selectItems को ui के अंदर रखना होगा: दोहराना, फिर ui: दोहराना मेरे कस्टम घटक के अंतर्गत है। मैं फिर इस मुद्दे पर भाग गया। मैं मोजरा कोड देखना चाहता हूं जो इसे संभालता है