2012-09-08 15 views
6

से मैं JSF और Primefaces उपयोग कर रहा हूँ और मेरे सवाल यह है:JSF ViewParam CommandButton

मैं एक पृष्ठ (page1.jsf) है (अंतरिक्ष सीमांकित) एक तार की सूची के साथ एक दृश्य के परम recive:

<f:metadata> 
<f:viewParam name="list" value="#{bean1.list}" converter="listConverter"/> 
</f:metadata> 

सूची कनवर्टर स्ट्रिंग को अलग-अलग शब्दों की सूची में परिवर्तित करता है। यदि मैं यूआरएल के माध्यम से पृष्ठ तक पहुंचता हूं (उदाहरण: पेज 1.जेएसएफ? सूची = शब्द 1 शब्द 2 शब्द 3 ") सब ठीक काम करता है!

लेकिन अब मैं उस सूची को बनाने के लिए एक और पेज (पेज 2.जेएसएफ) का उपयोग करने की कोशिश कर रहा हूं । पदों की मैं एक Primeface DataTable उपयोग कर रहा हूँ, इस उदाहरण की सहायता: http://www.primefaces.org/showcase/ui/datatableRowSelectionRadioCheckbox.jsf

मैं उपयोगकर्ता के लिए संभव tomake चाहते एकाधिक पंक्तियों (चेक बॉक्स Primeface उदाहरण) का चयन करें और फिर एक बटन है कि page1.jsf पर रीडायरेक्ट करेगा प्रेस करने और चयनित आइटमों की सूची पैरामीटर के रूप में भी पास करती है (उदाहरण के लिए, प्राइमफेस शोकेस उदाहरण का उपयोग करके, चयनित कार मॉडल की एक सूची पास करें)

मैं टी करने की कोशिश कर रहा हूं उसके:

<p:commandButton action="page1?faces-redirect=true&amp;includeViewParams=true" > 
<f:attribute name="list" value="#{bean2.convertSelectedItemsToString()}" /> 
</p:commandButton> 

या इस:

<p:commandButton action="page1?faces-redirect=true&amp;includeViewParams=true" > 
<f:param name="list" value="#{bean2.convertSelectedItemsToString()}" /> 
</p:commandButton> 

जहां bean2 एक selectedItems [] चयनित वस्तुओं के साथ है।

कहने की जरूरत नहीं है ... यह काम नहीं कर रहा है।

कोई मदद? अग्रिम धन्यवाद।

उत्तर

7

एक कमांड बटन यूआरएल बनाने के लिए एक विशेषता या पैरामीटर का उपयोग नहीं करता है जिसके लिए पुनर्निर्देशन होता है।

इसके लिए आप आमतौर पर h:commandLink या वैकल्पिक रूप से h:outputLink का उपयोग करते हैं, लेकिन आपको यह पता होना चाहिए कि ये पैरामीटर प्रस्तुत करेंगे क्योंकि पृष्ठ के अनुरोध के समय वे पैरामीटर प्रस्तुत करेंगे। यदि उपयोगकर्ता उसके बाद चयन में परिवर्तन करता है, तो वे लिंक में दिखाई नहीं देंगे।

एक विकल्प जो आपको नवीनतम चयन देगा, एक क्रिया विधि का उपयोग कर रहा है और वहां रीडायरेक्ट यूआरएल का निर्माण कर रहा है।

उदा।

<p:commandButton action="#{bean2.navigateWithSelection}" /> 

और फिर अपने सेम में:

public String navigateWithSelection() { 
    return "page1?faces-redirect=true&" + convertSelectedItemsToString(); 
} 

टिप्पणियों के अनुसार, अगर bean2 एक सामान्य सेम पृष्ठ के बारे में कोई ज्ञान नहीं है कि है, तो आप एक पैरामीटर के रूप लक्ष्य पृष्ठ में पारित कर सकते हैं:

<p:commandButton action="#{bean2.navigateWithSelection('page1')}" /> 

और फिर अपने सेम में फिर से:

+0

एक अस्थायी समाधान के रूप में मैं आपका दूसरा दृष्टिकोण चला गया। लेकिन मुझे यह पसंद नहीं है, क्योंकि इस तरह से मेरा नियंत्रक (बीन) मेरे विचारों पर भारी निर्भर है। मुझे उम्मीद थी कि जेएसएफ मुझे एक बेहतर समाधान प्रदान करेगा। – userk

+0

जेएसएफ में एक बैकिंग बीन सम्मेलन द्वारा "माना जाता है" एक दृश्य को वापस करने के लिए होता है, ताकि बैकिंग बीन निर्भर हो सके। 'बीन 2 नहीं है।convertSelectedItemsToString' पहले से ही विशिष्ट दिखता है, या आप वहां कुछ सामान्य कर रहे हैं? यदि आपको एक सामान्य समाधान की आवश्यकता है तो आप पेज में पैरामीटर के रूप में पास कर सकते हैं। अद्यतन उत्तर देखें। –

+0

यह एक चालाक कामकाज है! वह में स्वयं कर लूँगा! धन्यवाद। – userk