का उपयोग करते समय आउटपुट के साथ शून्य या खाली तारों को बदलें, निम्नलिखित कनवर्टर मूल रूप से अग्रणी और पीछे की ओर सफेद रिक्त स्थान को ट्रिम करने और एक स्थान या पाठ में शब्दों के बीच एक से अधिक स्थान को प्रतिस्थापित करने का इरादा है। कनवर्टर अब null
या "उपलब्ध नहीं" के साथ खाली तारों को बदलने के लिए संशोधित किया गया है (यदि आवश्यक हो तो गतिशील रूप से स्थानीयकृत किया जा सकता है)।किसी जेएसएफ कनवर्टर
@FacesConverter(forClass = String.class)
public class StringTrimmer implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return Boolean.TRUE.equals(component.getAttributes().get("skipConverter")) ? value : value == null ? null : value.trim().replaceAll("\\s+", " ");
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return Boolean.TRUE.equals(component.getAttributes().get("skipConverter")) ? value == null ? null : value.toString() : value == null || ((String) value).trim().length() == 0 ? "Not available" : ((String) value).trim().replaceAll("\\s+", " ");
}
}
कन्वर्टर्स के बाद से लागू नहीं कर रहे हैं, जब एक मॉडल मूल्य, null
पर the previous question आधारित, com.sun.faces.renderkit.html_basic.TextRenderer
लागू कन्वर्टर्स करने के इरादे से बढ़ा दिया गया है है जब जुड़े मॉडल में एक संपत्ति के मूल्य null
है।
public final class HtmlBasicRenderer extends TextRenderer {
@Override
public String getCurrentValue(FacesContext context, UIComponent component) {
if (component instanceof UIInput) {
Object submittedValue = ((UIInput) component).getSubmittedValue();
if (submittedValue != null) {
return submittedValue.toString();
}
}
return getFormattedValue(context, component, getValue(component));
}
}
following सशर्त परीक्षण हटा दिया गया है ताकि getFormattedValue()
विधि लागू किया जा सकता है, भले ही एक null
मूल्य का सामना करना पड़ा है। इस प्रकार
Object currentObj = getValue(component);
if (currentObj != null) {
currentValue = getFormattedValue(context, component, currentObj);
}
यह faces-config.xml
में पंजीकृत किया गया है।
<render-kit>
<renderer>
<component-family>javax.faces.Output</component-family>
<renderer-type>javax.faces.Text</renderer-type>
<renderer-class>com.example.renderer.HtmlBasicRenderer</renderer-class>
</renderer>
</render-kit>
कनवर्टर StringTrimmer
अभी भी लागू नहीं किया गया है (getAsString()
), जब लक्ष्य मॉडल में एक संपत्ति मान देता है null
।
ईएल में #{empty bean.value ? 'Not available' : bean.value}
जैसे हर जगह एक सशर्त परीक्षण डालकर पागलपन है। कोई उपाय?
यह मोजररा 2.2.12 है।
अद्यतन: जब getFormattedValue()
विधि के अंदर वापसी बयानों में से एक एक खाली स्ट्रिंग ""
, लौटने जब currentValue
null
है, कॉल में एक परिवर्तित मान देने के लिए संशोधित किया गया है
परिवर्तित मूल्यों उपलब्ध हैं,
javax.faces.convert.Converter.getAsString(FacesContext context, UIComponent component, Object value)
उस विधि के अंदर getFormattedValue()
।
इस प्रकार, following,
if(currentValue == null) {
return "";
}
से बदलने की जरूरत है,
if (currentValue == null) {
converter = Util.getConverterForClass("".getClass(), context);
return converter == null ? "" : converter.getAsString(context, component, currentValue);
}
(जरूरत सुझाव)।
जिसमें घटक आप इस कोशिश कर रहे हैं (जब से तुम एक सामान्य रूप में बनाना 'forClass = String.class') यदि बस आउटपुट टेक्स्ट में, मैं एक साधारण कस्टम घटक का उपयोग करता हूं और डी को प्रतिस्थापित/प्रतिस्थापित करता हूं efault जेएसएफ या प्राइमफेस इस के साथ एक। – Kukeltje
यह मूल रूप से '' है। कस्टम घटक चयनित वैकल्पिक फ़ील्ड के लिए बनाए जा सकते हैं लेकिन फिर किसी को ध्यान से याद रखने की आवश्यकता है कि कौन से फ़ील्ड शून्य या खाली मान रख सकते हैं। –
Tiny
ठीक है, आप पूरी तरह से राज्य ('forClass = String.class' का उपयोग करके) ** ** ** प्रत्येक ** स्ट्रिंग के लिए है? तो चीजों को याद रखने की जरूरत नहीं है। हमेशा कस्टम ' ';-) –
Kukeltje