दिलचस्प पोस्ट
पुनरावर्तन के वास्तविक दुनिया उदाहरण "दिए गए पथ का प्रारूप समर्थित नहीं है।" फ़्लोट का उपयोग "अतिभारित कार्य करने के लिए कॉल अस्पष्ट" त्रुटि देता है setAttribute, onClick और क्रॉस ब्राउज़र संगतता PhantomJS का उपयोग करते हुए एक फार्म कैसे सबमिट करें क्या .NET 4 में एक अंतर्निहित JSON serializer / deserializer है? रीसाइक्लरदृश्य में दृश्यमान आइटम प्राप्त करें जावा में, मैं बाइनरी प्रारूप में एक पूर्णांक स्थिरता को परिभाषित कर सकता हूँ? सी ++ में आप किस प्रकार की एन्यूम का उपयोग कर रहे हैं? संरेखित <div> तत्वों की ओर से किनारे मैं एक एमडी 5 हैश कैसे बना सकता हूँ? Windows बैच फ़ाइल में समय अंतर की गणना करें सी # का उपयोग करते हुए एक टैब वर्ण को टेक्स्ट में डालना SQL सर्वर अनुक्रमणिका – आरोही या अवरोही, यह क्या अंतर करता है? मेमोरी मेप क्या है?

पोस्ट के बाद JSF में दृश्य पैरामीटर को संभालना

मेरे पास कुछ ऐसे पेज हैं जिनके लिए काम करने के लिए उपयोगकर्ता आईडी की जरूरत है, इस प्रकार निम्न कोड:

userpage.xhtml

<!-- xmlns etc. omitted --> <html> <f:metadata> <f:viewParam name="userId" value="#{userPageController.userId}"/> </f:metadata> <f:view contentType="text/html"> <h:head> </h:head> <h:body> <h:form> <h:commandButton action="#{userPageController.doAction}" value="post"/> </h:form> </h:body> </f:view> 

userPageController.java

 @Named @ViewScoped public class userPageControllerimplements Serializable { private static final long serialVersionUID = 1L; @Inject protected SessionController sessionController; @Inject private SecurityContext securityContext; @Inject protected UserDAO userDAO; protected User user; protected Long userId; public UserPage() { } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Long getUserId() { return userId; } public void setUserId(Long userId) { if(!FacesContext.getCurrentInstance().isPostback()){ User u = userDAO.find(userId); this.userId = userId; this.user = u; } } public void doAction(){ } } 

हालांकि, doAction कहा जाता है के बाद, यूआरएल में दृश्य पैरामीटर गायब हो जाता है। बीन अभी भी अपने विचारों की वजह से काम करता है, लेकिन यह भविष्य के नेविगेशन के अपने प्रयासों को नष्ट कर देता है। जब मैं चारों ओर खोज करता हूं, मुझे इस धारणा का पता चलता है कि पोस्ट पैरामीटर को userpage.jsf? UserId = 123 पढ़ने के बाद ही रहना चाहिए, लेकिन ऐसा नहीं है। वास्तव में इरादा व्यवहार क्या है?

इससे संबंधित, मैंने किसी दूसरे पेज पर नेविगेट करते समय स्वचालित रूप से दृश्य मानकों को जोड़ने का प्रयास किया है जहां मैं उपयोगकर्ता आईडी रखना चाहता हूं। यह दूसरों के लिए काम करने लगता है, लेकिन मेरे लिए, ViewRoot में userId हमेशा शून्य है। नीचे दिए गए कोड को व्यूअरमामीटर पुन: प्राप्त करने के लिए उपयोग किया गया (मुझे पता है कि मैं अपने अस्थायी रूप से संग्रहीत उपयोगकर्ता आईडी ने नेविगेशन के लिए बीन में उपयोग कर सकता था, लेकिन यह समाधान बहुत कमाल होगा):

  String name = "userId"; FacesContext ctx = FacesContext.getCurrentInstance(); ViewDeclarationLanguage vdl = ctx.getApplication().getViewHandler().getViewDeclarationLanguage(ctx, viewId); ViewMetadata viewMetadata = vdl.getViewMetadata(ctx, viewId); UIViewRoot viewRoot = viewMetadata.createMetadataView(ctx); UIComponent metadataFacet = viewRoot.getFacet(UIViewRoot.METADATA_FACET_NAME); // Looking for a view parameter with the specified name UIViewParameter viewParam = null; for (UIComponent child : metadataFacet.getChildren()) { if (child instanceof UIViewParameter) { UIViewParameter tempViewParam = (UIViewParameter) child; if (name.equals(tempViewParam.getName())) { viewParam = tempViewParam; break; } } } if (viewParam == null) { throw new FacesException("Unknown parameter: '" + name + "' for view: " + viewId); } // Getting the value String value = viewParam.getStringValue(ctx); // This seems to ALWAYS be null. 

एक आखिरी सोचा यह है कि सेटर तरीके अभी भी काम करते हैं, setUserId को पोस्ट पर सही मूल्य के साथ कहा जाता है।

क्या मैंने पूरी तरह से निराश किया है कि दृश्य पैरामीटर कैसे काम करता है, या यहां किसी प्रकार की बग है? मुझे लगता है कि मेरा उपयोग केस extremly आम होना चाहिए और ढांचे में बुनियादी समर्थन है।

Solutions Collecting From Web of "पोस्ट के बाद JSF में दृश्य पैरामीटर को संभालना"

जब मैं चारों ओर खोज करता हूं, मुझे इस धारणा का पता चलता है कि पोस्ट पैरामीटर को userpage.jsf? UserId = 123 पढ़ने के बाद ही रहना चाहिए, लेकिन ऐसा नहीं है। वास्तव में इरादा व्यवहार क्या है?

यह व्यवहार सही है। <h:form> बिना किसी दृश्य मानकों के एक एआरएम के साथ एक HTML <form> तत्व उत्पन्न करता है पोस्ट अनुरोध केवल उस यूआरएल को ही प्रस्तुत करता है। यदि आप URL में दृश्य मानदंडों को रखने का इरादा रखते हैं, तो मूल रूप से 3 तरीके हैं:

  1. कुछ अजेक्स जादू में लाओ।

     <h:commandButton action="#{userPageController.doAction}" value="post"> <f:ajax execute="@form" render="@form" /> </h:commandButton> 

    इस तरह प्रारंभ में अनुरोधित पृष्ठ और इस प्रकार ब्राउज़र के एड्रेस बार में अनुरोध यूआरएल हर समय समान रहता है।

  2. यदि लागू हो (उदाहरण के लिए पेज-टू-पेज नेविगेशन), तो इसे एक GET अनुरोध करें और includeViewParams=true । आप <h:link> और <h:button> लिए उपयोग कर सकते हैं:

     <h:button outcome="nextview?includeViewParams=true" value="post" /> 

    हालांकि, Moazzra के संस्करणों में इसकी एक ईएल सुरक्षा का उपयोग 2.1.6 से अधिक पुराने है। सुनिश्चित करें कि आप Mojarra 2.1.6 या नए का प्रयोग कर रहे हैं। यह भी मुद्दा देखें 2247

  3. कार्रवाई की पीढ़ी को <h:form> स्वयं के URL पर नियंत्रण करें कस्टम ViewHandler प्रदान करें (बस ViewHandlerWrapper विस्तार ViewHandlerWrapper ) जिसमें आप getActionURL() में नौकरी करते हैं

     public String getActionURL(FacesContext context, String viewId) { String originalActionURL = super.getActionURL(context, viewId); String newActionURL = includeViewParamsIfNecessary(context, originalActionURL); return newActionURL; } 

    इसे चलाने के लिए, इसे faces-config.xml में निम्नानुसार पंजीकृत करें:

     <application> <view-handler>com.example.YourCustomViewHandler</view-handler> </application> 

    यह भी क्या है OmniFaces <o:form> कर रहा है यह एक अतिरिक्त शामिल includeViewParams विशेषता का समर्थन करता है जिसमें फ़ॉर्म के एक्शन यूआरएल के सभी दृश्य पैरामीटर शामिल होते हैं:

     <o:form includeViewParams="true"> 

अद्यतन : वर्तमान दृश्य के दृश्य पैरामीटर प्राप्त करना प्रोग्राम (जो मूल रूप से आपका दूसरा प्रश्न है) निम्नानुसार किया जाना चाहिए:

 Collection<UIViewParameter> viewParams = ViewMetadata.getViewParameters(FacesContext.getCurrentInstance().getViewRoot()); for (UIViewParameter viewParam : viewParams) { String name = viewParam.getName(); Object value = viewParam.getValue(); // ... } 

क्या मैं सही हूं कि समाधान 1 <f:ajax execute="@form" render="@form" /> लिए काम करने के लिए भी कुछ भी शामिल करना होगा

 <f:param name="userId" value="#{userPageController.userId}"/> 

<h:commandButton> अंदर?

जैसा कि यह https://stackoverflow.com/a/14026995/811046 में वर्णित है