2010-11-05 11 views
12

मैं वर्तमान में एक enum तो यह एक विशिष्ट वस्तु में सेट किया जा सकता से एक html:select टैग बनाने के लिए कोशिश कर रहा हूँ:Struts html में एक enum उपयोग कैसे करें: चयन टैग

class someClass { 
    SomeEnum someProperties = null; 
    public getSomeProperties() { return someProperties; } 
    public setSomeProperties(SomeEnum e) { someProperties = e; } 

JSP Struts टैग के साथ:

<html:select name="someForm" property="someInstance.someProperties" > 
    <html:option value="${someEnum.STANDARD}"><bean:message key="i18nkeystd"/> 
    <html:option value="${someEnum.PREVENTIVE} "><bean:message key="i18nkeyprev"/> 
</html:select> 

लेकिन मुझे वर्तमान में "कुछ क्लास.सेटप्रॉपर्टीज - ​​तर्क प्रकार मेल नहीं खाता" अपवाद नहीं मिल रहा है।

क्या स्ट्रेट्स चुनिंदा टैग में एनम का उपयोग करने का कोई तरीका है।

उत्तर

9

एक स्ट्रूट 1 फ्रेमवर्क जावा 5 की विशेषताओं के साथ ठीक से काम नहीं करेगा क्योंकि इसे जेडीके 1.4 के साथ काम करने के लिए डिज़ाइन किया गया था।

नवीनतम स्थिर रिलीज Struts 1.3.10 है। स्ट्रूट्स 1.3.10 के लिए prerequisites जावा डेवलपमेंट किट, संस्करण 1.4 या बाद में शामिल है। यदि यह जेडीके 1.4 पर चलता है तो इसका मतलब है कि यह जावा 5 की विशेषताओं का उपयोग नहीं करता है, जिसमें enums शामिल हैं।

यदि आप कम से कम जेडीके 1.5 (यह ठीक है) का उपयोग करते हैं तो आप अपने कोड में enums का उपयोग कर सकते हैं, स्ट्रेट्स जेडीके 1.5 पर भी चलेंगे (क्योंकि सूर्य ने उन्हें पिछड़ा संगत बनाने के लिए वास्तव में कड़ी मेहनत की है) लेकिन ढांचे को स्वयं नहीं पता भाषा में जोड़े गए नए फीचर्स के बारे में। इसलिए स्वचालित संचालन के लिए एक्शनफॉर्म गुणों के लिए मैपिंग अनुरोध पैरामीटर जैसे यह उचित परिणाम प्रदान नहीं करेगा।

7

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

असल में, मैं संपत्ति को स्ट्रिंग के रूप में घोषित करता हूं और अनुवाद करने के लिए Enum.valueOf() का उपयोग करता हूं।

package example; 

import javax.servlet.ServletRequest; 
import javax.servlet.http.HttpServletRequest; 

import org.apache.struts.action.ActionErrors; 
import org.apache.struts.action.ActionForm; 
import org.apache.struts.action.ActionMapping; 
import org.apache.struts.action.ActionMessage; 

public class SearchByForm extends ActionForm{ 

    private static final long serialVersionUID = 5609098522501926807L; 

    private String selectedOption; 

    public enum SearchByOptions{ 
     NONE("-- Select One --"), 
     OPTION1("Option 1"), 
     OPTION2("Option 2"), 
     OPTION3("Option 3"), 
     OPTION4("Option 4"), 
     OPTION5("Option 5"); 

     private String displayText; 

     private SearchByOptions(String displayText){ 
      this.displayText = displayText; 
     } 

     public String getDisplayText(){ 
      return this.displayText; 
     } 
    } 

    /** 
    * @param selectedOption the selectedOption to set 
    */ 
    public void setSelectedOption(String selectedOption) { 
     this.selectedOption = selectedOption; 
    } 

    /** 
    * @return the selectedOption 
    */ 
    public String getSelectedOption() { 
     return selectedOption; 
    } 

    public void reset(ActionMapping mapping, ServletRequest request) 
    { 
     setSelectedOption(SearchByOptions.NONE.toString()); 
    } 

    @Override 
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { 

     ActionErrors errors = new ActionErrors(); 

     if(SearchByOptions.valueOf(getSelectedOption()) == SearchByOptions.NONE) 
     { 
      errors.add("selectedOption", new ActionMessage("error.common.html.select.required")); 
     } 

     return errors; 
    } 
} 

यहाँ और है JSP:

यहाँ मेरी ActionForm वर्ग है

<html> 
    <body> 
     <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
     <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> 

     <% 
      pageContext.setAttribute("searchByOptions", example.SearchByForm.SearchByOptions.values()); 
     %> 

     <div class="searchByInput"> 
      <html:form action="submitSearchBy"> 
       <html:select property="selectedOption"> 
        <c:forEach var="searchByOption" items="${searchByOptions}"> 
         <jsp:useBean id="searchByOption" type="example.SearchByForm.SearchByOptions"/> 
         <html:option value="${searchByOption}"><%= searchByOption.getDisplayText()%></html:option> 
        </c:forEach> 
       </html:select> 
       <html:submit/> 
      </html:form> 
     </div> 
    </body> 
</html> 

और अंत में कार्रवाई:

package example; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.struts.action.Action; 
import org.apache.struts.action.ActionForm; 
import org.apache.struts.action.ActionForward; 
import org.apache.struts.action.ActionMapping; 

public class SubmitSearchByAction extends Action{ 

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { 
     ActionForward forwardAction; 

     SearchByForm searchForm = (SearchByForm)form; 

     switch(SearchByOptions.valueOf(searchForm.getSelectedOption())){ 
      case OPTION1: 
       forwardAction = mapping.findForward(SearchByOptions.OPTION1.toString()); 
       break; 
      case OPTION2: 
       forwardAction = mapping.findForward(SearchByOptions.OPTION2.toString()); 
       break; 
      case OPTION3: 
       forwardAction = mapping.findForward(SearchByOptions.OPTION3.toString()); 
       break; 
      case OPTION4: 
       forwardAction = mapping.findForward(SearchByOptions.OPTION4.toString()); 
       break; 
      case OPTION5: 
       forwardAction = mapping.findForward(SearchByOptions.OPTION5.toString()); 
       break; 
     } 
     return forwardAction; 
    } 
} 
संबंधित मुद्दे