2011-04-19 27 views
6

आदेश डिफ़ॉल्ट स्प्रिंग सुरक्षा लॉगिन प्रपत्र को बदलने के लिए मैं इस समाधान के साथ आया था:जेएसएफ में फॉर्म एक्शन कैसे परिभाषित करें?

<form name="f" action="../j_spring_security_check" method="POST" > 
    <h:panelGrid columns="2"> 
     <h:outputText value="Username" /> 
     <h:inputText id="j_username" /> 
     <h:outputText value="Password" /> 
     <h:inputText id="j_password" /> 
    </h:panelGrid> 
    <h:commandButton value="Login" /> 
</form> 

लेकिन सादा <form> टैग के बजाय मैं <h:form> का उपयोग करने के बाद से Primefaces घटकों केवल <h:form> के भीतर काम करना चाहते हैं। <h:form> का उपयोग करके फॉर्म कार्रवाई स्वचालित रूप से जेएसएफ द्वारा वर्तमान पृष्ठ पर सेट की जाएगी, न कि ऊपर दिए गए उदाहरण में मेरे द्वारा निर्धारित मूल्य पर। मुझे अब "../j_spring_security_check" कार्रवाई को कोड करना होगा? मैं इसे <h:commandButton> में डाल की कोशिश की के रूप में इस प्रकार है, लेकिन वह काम नहीं करता:

<h:form name="f"> 
    <h:panelGrid columns="2"> 
     <h:outputText value="Username" /> 
     <h:inputText id="j_username" /> 
     <h:outputText value="Password" /> 
     <h:inputText id="j_password" /> 
    </h:panelGrid> 

    <h:commandButton value="Click here" action="../j_spring_security_check" /> 
</form> 

यह त्रुटि संदेश Unable to find matching navigation case with from-view-id '/login.xhtml' for action '../j_spring_security_check' with outcome '../j_spring_security_check' की ओर जाता है।

क्या यह faces-config.xml में नेविगेशन केस को परिभाषित करने का एकमात्र तरीका है? मैं इस साधारण उपयोग के मामले के लिए एक बीन का उपयोग करने से बचना चाहता हूं।

action="#{managedBean.method}" 
+0

[इस जवाब देखें] (http://stackoverflow.com/questions/3807746/jsf-change-the-action-for-a-hcommandbutton-2-0/3807808#3807808) 'ज के बारे में: कमांड बटन की कार्रवाई –

+1

@ मैट: दुर्भाग्य से साइट '../ j_spring_security_check' कहलाए जाने के लिए एक एक्सएचटीएमएल साइट नहीं है। आपके द्वारा प्रदान किया गया लिंक यह मानता है। –

उत्तर

8

मेरे लिए सबसे अच्छा समाधान के बजाय डिफ़ॉल्ट <button> टैग का उपयोग करने के लिए है:

1

आपकी कार्रवाई विशेषता एक ईएल अभिव्यक्ति इस प्रकार की तरह होना चाहिए। चूंकि ठेठ बटन स्टाइल लागू नहीं किया जा रहा है (मेरे मामले में मैं प्राइमफेस का उपयोग कर रहा हूं), मैंने इसे मैन्युअल रूप से सेट किया है। यहाँ पूरे परिणाम है:

<h:outputStylesheet library="primefaces" name="jquery/ui/jquery-ui.css" /> 
    <h:outputStylesheet library="css" name="login.css" /> 

    <div class="message"> 
     <c:if test="#{param.error == 1 and SPRING_SECURITY_LAST_EXCEPTION != null}"> 
      <span class="error">#{SPRING_SECURITY_LAST_EXCEPTION.message}</span> 
     </c:if> 
    </div> 



    <div class="login"> 
     <form action="../j_spring_security_check" method="post"> 
      <h:panelGrid columns="2"> 
       <h:outputText value="Username" /> 
       <h:inputText id="j_username" /> 
       <h:outputText value="Password" /> 
       <h:inputSecret id="j_password" /> 
      </h:panelGrid> 

      <div class="submit"> 
       <button type="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"> 
        <span class="ui-button-text">Login</span> 
       </button> 
      </div> 
     </form> 
    </div> 
+0

मैं अपने लॉगिन बीन के लिए एक बीन को परिभाषित करने से बचना चाहता हूं क्योंकि यह बीन नेविगेशन केस को वापस छोड़कर कुछ भी नहीं करेगा। –

+0

क्या कार्रवाई लिस्टनर विशेषता आपको एक ही परिणाम देती है? मुझे लगता है कि प्राइमफेस घटकों को कार्रवाई के लिए ईएल अभिव्यक्ति की आवश्यकता होती है क्योंकि यह एकमात्र तरीका था जिसे मैं इसे काम करने में सक्षम था। मुझे एक लॉगिनबीन भी बनाना था। –

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। जैसे ही हमारे लॉगिन फॉर्म को और अधिक कार्यक्षमता की आवश्यकता होती है, मैं एक बीन का उपयोग करूंगा। अभी के लिए मैं सामान्य '

' टैग से संतुष्ट हूं। –

7
<h:form id="login" prependId="false"    onsubmit="document.getElementById('login').action='j_security_check';"> 
+1

देखें यदि आपको '' के लिए 'id' की आवश्यकता नहीं है '' का उपयोग करें –

0

आपका सबसे अच्छा मौका बटन के onclick संपत्ति का प्रयोग है। यह प्राइमफ़ेस कमांड बटन के साथ एक उदाहरण है, लेकिन यह जेएसएफ घटकों के लिए भी काम करेगा क्योंकि यह (मूल) जावास्क्रिप्ट ऑनक्लिक फ़ंक्शन का उपयोग करता है।

<h:form> 
<p:commandButton value="Submit" onclick="alert('JS!')" actionListener="#{tweetBean.addTweet()}" update=":tabView,:trends,:tweetsnr" /> 
</h:form> 
संबंधित मुद्दे