2013-02-22 12 views
10

मेरे उदाहरण में एक f: selectItems-विशेषता के साथ एक selectOneMenu है। चुनिंदा आइटम इस तरह मेरी सेम से हल कर रहे हैं: मेरे सेम मेंजेएसएफ सिलेक्ट इटम्स और एस्केपिंग (एक्सएसएस)

<h:selectOneMenu value="#{bean.value}"> 
    <f:selectItems value="#{bean.selectItems}" var="obj" itemValue="#{obj}" itemLabel="#{obj.name}"/> 
</h:selectOneMenu> 

विधि getSelectItems() कि तरह लग रहा है:

public List<MyObject> getSelectItems() { 
     List<MyObject> list = new LinkedList<MyObject>(); 

     MyObject obj = new MyObject("Peter"); 
     list.add(obj); 

     return list; 
    } 

वस्तुओं प्रदर्शित किए जाते हैं कि एक विशेषता के साथ सरल वस्तुओं रहे हैं " नाम "।

इस बिंदु तक कुछ खास नहीं है। लेकिन अब मुझे लगता है कि करने के लिए अपने-प्रक्रिया में परिवर्तन:

public List<MyObject> getSelectItems() { 
     List<MyObject> list = new LinkedList<MyObject>(); 

     MyObject obj = new MyObject("<script>alert('xss is bad');</script>"); 
     list.add(obj); 

     return list; 
    } 

जावास्क्रिप्ट नहीं करता MenuRenderer क्लास और मेरा पेज की सहायता से निकले हो मुझे चेतावनी-संदेश को दर्शाता है।

क्या कोई कारण है कि SelectItem के एस्केप-एट्रिब्यूट का डिफ़ॉल्ट मान "झूठा" है? मैं उस समस्या को कैसे ठीक कर सकता हूं? (मैं मोजाररा 2.1.7 का उपयोग करता हूं)

+0

आप अपना उत्तर यहां देख सकते हैं [यहां] (http://stackoverflow.com/questions/14238646/how-to-escape-fselectitem-itemlabel-attribute) –

+0

@ विकसवी: ओपी की ठोस समस्या दूसरे तरीके से संबंधित है। – BalusC

उत्तर

12

डिफ़ॉल्ट वास्तव में false नहीं होना चाहिए था। मैंने इसे issue 2747 के रूप में रिपोर्ट किया है।

इस बीच, इसे किसी भी तरह से बचने के लिए itemLabelEscaped="true" जोड़ें।

<f:selectItems ... itemLabelEscaped="true" /> 

ध्यान दें कि यह केवल आवश्यक है जब आप GenericObjectSelectItems का उपयोग कर रहे हैं, जैसे कि जब आप एक E[]/List<E>/List<SelectItem>/SelectItem[] के बजाय Map<K, V> की आपूर्ति कर रहे हैं। यह भी ध्यान रखें कि बचने से केवल अनिवार्य है जब यह उपयोगकर्ता द्वारा नियंत्रित इनपुट से संबंधित है (जो सौभाग्य से बहुत ही कम कीमतों में मामला है)।

+0

यह जेएसएफ 2.2 ([JAVASERVERFACES_SPEC_PUBLIC-1167] (https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1167) में तय किया गया है) और मोजार्रा 2.2.6 ([जावास्वरफेस -3143] (https: // जावा। शुद्ध/jira/ब्राउज़/JAVASERVERFACES-3143))। –

संबंधित मुद्दे