2010-02-19 16 views
8

मैं उपयोगकर्ताओं द्वारा दर्ज विभिन्न फ़ील्ड की जांच करने के लिए स्ट्रूट सत्यापन का उपयोग करने की कोशिश कर रहा हूं। अगर कोई मेरी मदद करने में सक्षम है कि मेरी क्या कमी है, तो मैं बहुत आभारी रहूंगा। यहाँ मैं क्या है: TestAction-validation.xml हैस्ट्रेट सत्यापन क्यों मेरे लिए काम नहीं कर रहा है?

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE validators PUBLIC 
    "-//OpenSymphony Group//XWork Validator Config 1.0//EN" 
    "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd"> 

<validators> 
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> 
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> 
    . . . 
</validators> 

यहाँ:

मैं WEB-INF/classes/

यहाँ में validation.xml और TestAction-validation.xml डाल validation.xml है

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 
<validators> 
    <field name="testInt"> 
    <field-validator type="int"> 
     <param name="min">0</param> 
     <param name="max">9</param> 
     <message>Number not in range</message> 
    </field-validator> 
    </field> 
    <field name="testString"> 
    <field-validator type="stringlength"> 
     <param name="minLength">4</param> 
     <message>String not long enough.</message> 
    </field-validator> 
    </field> 
</validators> 

मेरे struts.xml फैली struts-default, और मैं एक बेहद सरल एक्शन क्लास TestAction जो ActionSupport फैलाता है और इसमें testInt और testString फ़ील्ड हैं।

जो मैंने पढ़ा है, उससे स्ट्रेट्स के लिए दर्ज मूल्यों की जांच करने के लिए पर्याप्त होना चाहिए, लेकिन ऐसा नहीं हो रहा है। मैं क्या खो रहा हूँ?

+0

क्या आप अपना एक्शन मैपिंग/struts.xml पोस्ट कर सकते हैं? देव मोड (struts.devMode) को चालू करना अगर यह नहीं है, तो हो रहा है कि आप क्या हो रहा है के बारे में अधिक संकेत दे सकते हैं। – Nate

उत्तर

6

आपके पास दो विकल्प हैं, प्रति-मॉडल आधार या प्रति-कार्य पर मान्य हैं। एक्शन लेवल पर सत्यापन करने के लिए, आप बस एक फाइल बनायेंगे जो नाम {your action} -validation.xml लेती है और इसे एक्शन क्लास के समान पैकेज में रखती है। मॉडल स्तर पर मान्य करने के लिए, आप एक समान फ़ाइल बनायेंगे जो मॉडल ऑब्जेक्ट का नाम लेती है और फिर मॉडल की सत्यापन फ़ाइल में नियमों के अनुसार सत्यापित करने के लिए अपनी कार्य सत्यापन फ़ाइल को निर्देशित करती है। (Reference)

अपनी जावा स्रोत फ़ाइलों (डिफ़ॉल्ट पैकेज) की रूट में validation.xml डालें और उसी निर्देशिका में TestAction-validation.xml डालें जहां आपकी TestAction.java फ़ाइल स्थित है। अधिकांश आईडीई स्वचालित रूप से सभी संसाधनों को संबंधित निर्देशिका में कॉपी कर देगा जहां आपकी कक्षा फ़ाइल जेनरेट की जाएगी।

अद्यतन:

http://struts.apache.org/2.x/docs/validation.html

How Validators of an Action are Found

+0

बहुत धन्यवाद। एक और चीज जिसे मैं याद कर रहा था, मेरे जेएसपी में '' जैसे टैग शामिल थे। –

+1

आपका स्वागत है ... YaaaHoooo यह काम करता है :-) –

3

मेरे सिर के शीर्ष की कुछ चीजें हो सकती हैं।

1) क्या आप डिफ़ॉल्ट इंटरसेप्टर स्टैक का उपयोग कर रहे हैं - इस स्टैक में एक सत्यापन इंटरसेप्टर है जो काम करने के सत्यापन के लिए आवश्यक है, अन्यथा आपको अपने स्टैक में मैन्युअल रूप से सत्यापन इंटरसेप्टर निर्दिष्ट करना होगा।

2) टेस्टएक्शन-सत्यापन.एक्सएमएल वेब-आईएनएफ/कक्षाओं/[पैकेज] के तहत होना चाहिए, इसलिए यदि कार्रवाई com.foo है। TestAction तब TestAction-validation.xml WEB-INF/classes/com/foo/testAction-validation.xml

3) विधि के नाम का उपयोग करने का प्रयास करें जिसे आप सत्यापनकर्ता xml फ़ाइल के नाम पर TestAction क्लास में सबमिट कर रहे हैं। आपके पास टेस्टएक्शन- [method_to_be_validated] -validation.xml

आशा है कि मदद करता है!

3

हो सकता है कि क्योंकि DTD परिभाषा

http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd

अब वहां नहीं है

हे n struts2 स्टार्टअप मैं इस अपवाद हो रही है और मेरी मान्यता इंटरसेप्टर अब

Line: 1436 - sun/net/www/protocol/http/HttpURLConnection.java:1436:-1 
at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115) 
at com.opensymphony.xwork2.validator.DefaultValidatorFileParser.parseValidatorDefinitions(DefaultValidatorFileParser.java:118) 
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.retrieveValidatorConfiguration(DefaultValidatorFactory.java:195) 
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.parseValidators(DefaultValidatorFactory.java:184) 
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.<init>(DefaultValidatorFactory.java:55) 

Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://opensymphony.com/xwork/xwork-validator-config-1.0.dtd 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436) 
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) 
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source) 
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source) 
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source) 
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source) 
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) 
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) 
+0

स्वीकार्य उत्तर द्वारा प्रदान किए गए कम से कम एक लिंक में आपके सत्यापन मेटाडेटा फ़ाइलों के लिए उपयोग की जाने वाली नई DOCTYPE शामिल है: '' –

4

काम नहीं कर रहे नए नए DTD के साथ "<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">" बदलें

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> 

यह समाधान है, यह काम करेंगे ।

+0

ठीक है, लेकिन मुझे नहीं लगता कि मैं जांचने जा रहा हूं । मुझे चार साल पहले यह समस्या थी, और मैं अब स्ट्रैट्स का इतना उपयोग नहीं करता हूं। –

+0

मेरे लिए काम किया! धन्यवाद ! – Fundhor

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