2010-06-01 22 views
15

मैं जेएसएफ के लिए पूरी तरह से नया हूं, और यह तय करने के लिए अवधारणा का सबूत देने का प्रयास कर रहा हूं कि यह एक परियोजना के लिए उपयोगी होगा या नहीं। मेरे पीओसी में केवल एक पृष्ठ होता है, जिसमें एक टेबल होता है, जिसमें कुछ डेटा होता है।गतिशील कॉलम के साथ डेटाटेबल

स्तंभों की संख्या (साथ ही साथ पंक्तियों की संख्या) गतिशील है, पृष्ठ से पहले डेटाबेस से लोड किया गया है।

निम्नलिखित के साथ

, मैं, पंक्तियों की उचित संख्या के साथ दो स्थिर कॉलम मिल के रूप में मैं उम्मीद थी:

<h:dataTable id="data" value="#{viewDataBean.dataRows}" var="row"> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="Col 1"/> 
     </f:facet> 
     <h:outputText value="#{row.values[0].value}"/> 
    </h:column> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="Col 2"/> 
     </f:facet> 
     <h:outputText value="#{row.values[1].value}"/> 
    </h:column> 
</h:dataTable> 

मुझे क्या करना चाहता था <h:column>...</h:column> टैग का एक सेट के चारों ओर एक <c:forEach...> जोड़ने के लिए था , स्तंभों की संख्या से अधिक पुनरावृति करने के लिए है, लेकिन यह काम नहीं किया - मैं संयोजनों की एक किस्म की कोशिश की, लेकिन मैं काम करने के लिए कुछ इस तरह उम्मीद कर रहा था:

<h:dataTable id="data" value="#{viewDataBean.dataRows}" var="row"> 
    <c:forEach items="#{row.values}" var="val"> 
     <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Col 1"/> 
      </f:facet> 
      <h:outputText value="#{val.value}"/> 
     </h:column> 
    </c:forEach> 
</h:dataTable> 

Googling से, मैं विभिन्न अस्पष्ट टिप्पणियों पढ़ा है जैसे 'ऐसा करने का तरीका नहीं है', लेकिन मैं सही तरीके से किसी विशेष रूप से आकर्षक उदाहरण नहीं ढूंढ पा रहा हूं। किसी ने बैकिंग बीन में डेटाटेबल बनाने का उल्लेख किया है, लेकिन इसका एकमात्र उदाहरण मुझे मिल सकता है http://forums.sun.com/thread.jspa?threadID=577589। यह काम करता था, लेकिन बेकार महसूस किया, खासकर जब इस्तेमाल की जाने वाली कुछ विधियों को हटा दिया गया है।

फिलहाल, यह संभावना नहीं है कि मैं कोर जेएसएफ के अलावा किसी भी पुस्तकालय का उपयोग करने में सक्षम हूं, लेकिन यदि आवश्यक हो तो यह बदल सकता है। क्या कोई ऐसा करने के लिए सही तरीके से कोई प्रकाश डाल सकता है? ऐसा लगता है कि यह बहुत आसान होना चाहिए, इसलिए मुझे यकीन है कि मैं बस कुछ स्पष्ट याद कर रहा हूं।

उत्तर

12

जेएसटीएल और जेएसएफ सिंक में नहीं चलते हैं क्योंकि आप कोडिंग से अपेक्षा करते हैं। यह और भी इतना है कि जेएसटीएल पहले पूरे पृष्ठ को पहले से नीचे तक नीचे संसाधित करता है और फिर आगे की प्रक्रिया के लिए जेएसएफ के परिणामस्वरूप हाथों पर हाथ रखता है। #{row} उस समय अनुपलब्ध है जब जेएसटीएल व्यस्त है, इसलिए आपका प्रयास वास्तव में काम नहीं करेगा।

लिंक किए गए विषय में वास्तव में बहिष्कृत विधियों का उल्लेख है, लेकिन विषय भी वृद्ध है और विरासत जेएसएफ 1.0/1.1 पर चर्चा करता है। यदि आप उल्लिखित तरीकों के वर्तमान जावाडॉक्स का पता लगाते हैं, तो आप देखेंगे - सामान्य - प्रतिस्थापन विधियों का उल्लेख किया गया है।

पदावनत: उदाहरण के लिए, Application#createValueBinding() निम्नलिखित का उल्लेख है। इसे getExpressionFactory() पर कॉल करके ExpressionFactory.createValueExpression(javax.el.ELContext, java.lang.String, java.lang.Class) पर प्रतिस्थापित किया गया है।

आप गतिशील this article में एक datatable इस तरह से आबाद करने का कुछ ठोस उदाहरण मिल सकते हैं।

तृतीय पक्ष घटक पुस्तकालयों के रूप में, रिचफेसेस में rich:columns घटक है जो वास्तव में इस उद्देश्य के लिए डिज़ाइन किया गया है।

0

तृतीय पक्ष लाइब्रेरी प्राइमफ़ेस में डेटा स्रोत से गतिशील रूप से कॉलम उत्पन्न करने के लिए p:columns घटक है।

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