मैं अपने वेब एप्लिकेशन में Google's one जैसे फ़्रेम के साथ एक बहुत ही सरल अनुकूलन न्यूज़ व्यू पेज करने की कोशिश कर रहा हूं, लेकिन फ्रेम के साथ बहुत आसान है। प्रत्येक फ्रेम ऑब्जेक्ट में बस उसका शीर्षक होता है और इसकी सामग्री के रूप में जोड़ा जाने वाला यूआरएल होता है।प्राइमफ़ेस एकाधिक गतिशील सामग्री पैनल प्रदर्शित किए जाने के लिए
मैं अपने नवीनतम संस्करणों पर जेएसएफ और प्राइमफेस का उपयोग कर रहा हूं। तो मेरा बैकिंग बीन, जो @ViewScoped
है, के पास लॉग इन उपयोगकर्ता तक पहुंच है, जो @SessionScoped
बीन में संग्रहीत है, और उस उपयोगकर्ता के पास उसके संबंधित फ्रेम लोड हैं।
समस्या तब आती है जब मैं @ViewScoped
बीन पर इसे फिर से चलाने की कोशिश करता हूं, क्योंकि मुझे ऐसा करने का एकमात्र तरीका c:forEach
टैग के साथ है।
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">
<h:form>
<p:panel header="Noticias">
<h:panelGrid columns="#{fn:length(navegableHomeManager._UserFrames)}"
width="100%">
<c:forEach var="frame" items="#{navegableHomeManager._UserFrames}">
<p:column>
<p:panel header="#{frame._Name}" closable="true"
style="width:95%;height:500px;" id="#{frame._Name}">
<p:ajax event="close"
listener="#{navegableHomeManager.actionFrameClosed}" />
<ui:include src="#{frame._Path}" />
</p:panel>
</p:column>
</c:forEach>
</h:panelGrid>
</p:panel>
</h:form>
कि Obviusly यात्रा navegableHomeManager
सेम के साथ काम नहीं करता है, क्योंकि यह @ViewScoped
है: इस तरह मुझे क्या करना है। तो बीन प्रत्येक पुनरावृत्तियों में पुनर्निर्मित किया जाएगा। समाधान जो मैंने पहुंचा है बीन navegableHomeManager
और loggedBean
के बीच बीन का उपयोग करता है, इस तरह फ्रेम को वहां संग्रहीत किया जाता है और मैं उन्हें पुनरावृत्ति में ठीक से एक्सेस कर सकता हूं। यह उपरोक्त कोड के साथ काम कर रहा है।
हालांकि मुझे नहीं लगता कि हर बार जब मैं इस तरह से पुन: प्रयास करना चाहता हूं तो @SessionScoped
बीन (प्रत्येक मामले के लिए एक विशिष्ट बीन बनाना) का उपयोग करना अनिवार्य होना चाहिए। यही कारण है कि मैंने पुनरावृत्ति से बचने के लिए घटकों का उपयोग करने का प्रयास किया है।
<p:dataGrid columns="#{fn:length(navegableHomeManager._UserFrames)}"
value="#{navegableHomeManager._UserFrames}" var="frame">
<p:column>
<p:panel header="#{frame._Name}" closable="true"
style="width:95%;height:500px;">
<p:ajax event="close"
listener="#{navegableHomeManager.actionFrameClosed}" />
<ui:include src="#{frame._Path}" />
</p:panel>
</p:column>
</p:dataGrid>
यह काम नहीं करता है न जब सेम @ViewScoped
या @SessionScoped
, क्योंकि भले फ्रेम गुण सेट कर रहे हैं, ui:include
टैग पहले से ही कोई गंतव्य पथ के साथ बनाया गया है, तो मैं गंतव्य दिखाया नहीं जा सकता है पथ रूप से पथ। मुझे लगता है कि, को c:forEach
के साथ उसी समय लागू किया जा रहा है, c:forEach
टैग का उपयोग करके वास्तव में इसका एकमात्र तरीका है।
अपने विचारों को पूल करें।
अद्यतन
यहाँ मैं पोस्ट अधिक एक्सएचटीएमएल संदर्भ की समझ में मदद करने के लिए कोड। नया पृष्ठ एक टेम्पलेट में एकीकृत है। यही कारण है कि पेज जो लक्षित है ( /system/home/index.xhtml) है:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
template="/templates/general_template.xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<ui:define name="metadata">
<f:event type="preRenderView"
listener="#{navegableHomeManager.initialize}" />
</ui:define>
<ui:define name="general_content">
<ui:include src="/system/home/home_view.xhtml" />
</ui:define>
और इस तरह मैं भी यह करने की कोशिश की है, लेकिन c:forEach
टैग नहीं कर काम करने के लिए:
<context-param>
<param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name>
<param-value>/system/home/index.xhtml</param-value>
</context-param>
और वह समर्थन सेम हैडर है:
@ManagedBean
@ViewScoped
@URLMapping(id = "home", pattern = "/home", viewId = "/system/home/index.xhtml")
public class NavegableHomeManager extends SystemNavegable {
/**
*
*/
private static final long serialVersionUID = 6239319842919211716L;
@ManagedProperty(value = "#{loggedBean}")
private LoggedBean _LoggedBean;
//More stuff
उत्तर के लिए धन्यवाद। किसी कारण से, 'संदर्भ-परम' आधारित समाधान काम नहीं कर रहा है। 'navegableHomeManager' अब' लॉगबीन 'से सीधे फ्रेम को पुनर्प्राप्त कर रहा है, लेकिन' के लिए 'टैग पुनरावृत्ति नहीं कर रहा है, यहां तक कि '# {fn: length (navegableHomeManager._UserFrames)}' रिटर्न' 1'। बीन केवल तब बनाया जाता है जब मैं पृष्ठ तक पहुंचता हूं, जो सही है। मैं जेएसएफ 2.2 में भी अपग्रेड नहीं कर सकता क्योंकि कोई स्थिर रिलीज नहीं है और मैं 100% पर भरोसा नहीं कर सकता। –
संदर्भ पैरा के रूप में, जाहिर है आपने गलत दृश्य आईडी निर्दिष्ट की है (नोट: एक व्यू आईडी एक यूआरएल नहीं है, यह भौतिक फ़ाइल के संदर्भ-सापेक्ष पथ है, इसलिए यदि आपने अपनी जेएसएफ चीज़ को '* .jsf' पर मैप किया है, आपको अभी भी आईडी में '.xhtml' का उपयोग करना चाहिए)। शेष तक, खेद है कि अब तक प्रदान की गई जानकारी के आधार पर समस्या को समझना मुश्किल है। – BalusC
मैंने अपने कोड BalusC के अधिक कोड जोड़ने के सवाल को अद्यतन किया है। उम्मीद है कि यह मदद करेगा। –