2011-11-07 8 views
23

का उपयोग कर जेएसएफ में कुछ सामग्री के आउटपुट को दोहराने के लिए कैसे केवल मानक टैग (ui :, h: आदि)? दूसरे शब्दों में - जेएसएफ में नीचे PHP कोड के बराबर कैसे करें? मैं तुरंत ui:repeat का लाभ लेना चाहता था, लेकिन इसे संग्रह की आवश्यकता है - मेरे पास केवल संख्या है।मॉडल के बिना फेसलेट में लूप के लिए सरल के माध्यम से पाठ के आउटपुट को दोहराने के लिए कैसे?

for ($i = 0; $i < 10; $i++) { 
    echo "<div>content</div>"; 
} 

उत्तर

36

या तो उपयोग <c:forEach> बजाय (सच है, JSF के साथ मिश्रण JSTL कभी कभी पर सिकोड़ी है, लेकिन इस अपने विशेष मामले में नुकसान नहीं करना चाहिए, क्योंकि आप दृश्य "स्थिर" का निर्माण करना चाहते करने लगते हैं, यह किसी पर निर्भर नहीं करता है गतिशील चर):

xmlns:c="http://java.sun.com/jsp/jstl/core" 
... 
<c:forEach begin="1" end="10"> 
    <div>content</div> 
</c:forEach> 

या<ui:repeat> के लिए एक डमी सरणी बनाने के लिए एक ईएल समारोह बनाने के लिए:

package com.example.util; 

public final class Functions { 

    private Functions() { 
     // 
    } 

    public static Object[] createArray(int size) { 
     return new Object[size]; 
    } 
} 

/WEB-INF/util.taglib.xml में पंजीकृत जो है:

<?xml version="1.0" encoding="UTF-8"?> 
<facelet-taglib 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd" 
    version="2.0"> 
    <namespace>http://example.com/util/functions</namespace> 
    <function> 
     <function-name>createArray</function-name> 
     <function-class>com.example.util.Functions</function-class> 
     <function-signature>Object[] createArray(int)</function-signature> 
    </function> 
</facelet-taglib> 

और इस्तेमाल किया गया है के रूप में

xmlns:util="http://example.com/util/functions" 
... 
<ui:repeat value="#{util:createArray(10)}"> 
    <div>content</div> 
</ui:repeat> 
इस प्रकार

अद्यतन: मैं बस <ui:repeat> को begin और end विशेषताओं को जोड़ने के लिए एक वृद्धि अनुरोध पोस्ट: http://java.net/jira/browse/JAVASERVERFACES-2240

अद्यतन 2: मैं व्यक्तिगत रूप से यह JSF 2.3 के लिए प्रति https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1102 के रूप में लागू कर दिया है Mojarra 2.3-M06 जब से तुम

<ui:repeat begin="1" end="10"> 
    <div>content</div> 
</ui:repeat> 
+1

हालांकि यह अजीब तरह का है, कि चेहरे इस बॉक्स का समर्थन नहीं करते हैं ... – jFrenetic

+0

@jFrenetic: मुझे पूरा यकीन था कि जेएसएफ/फेसलेट्स मुद्दे डेटाबेस में यह कभी भी सूचित/अनुरोध किया गया था, लेकिन इसके बाद के आसपास देखने के बाद 15 मिनट, मुझे कुछ भी नहीं मिला। – BalusC

+0

@ बाल्लूसी जेएसटीएल को जेएसएफ वेब-एप में मिलाकर आप क्या सोचते हैं? मैं राय के साथ मुलाकात की कि यह एक अच्छा दृष्टिकोण नहीं है? – marioosh

13

चूंकि यह एक संग्रह की जरूरत है, तो आप एक संग्रह (समय की संख्या के रूप में के रूप में ज्यादा तत्वों से युक्त आप उत्पादन divs करना चाहते हैं) समर्थन की फलियों में बना सकते हैं:

public class MyBean { 
    private List list = new ArrayList<Integer(); 

    { ... populate the list with numbers, for example ... } 

    public List getList() { 
    return list; 
    } 
... 
} 

और उसके बाद:

<ui:repeat value="#{myBean.list}" var="item"> 
    <div>content</div> 
</ui:repeat> 

..which उत्पादन होगा list संपत्ति के आकार के रूप में कई divs।

+0

हाँ उपयोग करने के लिए सक्षम होना चाहिए, लेकिन यह कक्षा में सूची उत्पन्न करने के लिए की जरूरत है। मैंने PHP में कुछ सरल के बारे में सोचा;) – marioosh

+0

यह उत्तर क्यों नहीं उठाया गया है? –

+0

यह सही उत्तर है। ui: दोहराना जेएसएफ-सुरक्षित तरीका जेएसटीएल सी करने के लिए है: foreach – Calabacin

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