2010-11-05 10 views
12

Actualmente estoy tratando de crear una etiqueta html:select de una enumeración por lo que se podría establecer en un objeto específico:Cómo utilizar una enumeración en Struts HTML: seleccione la etiqueta

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

El JSP con etiquetas de 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> 

Pero actualmente me estoy haciendo un "no se puede invocar someClass.setProperties - argumento de coincidencia de tipo" excepción.

¿Hay una manera de utilizar una enumeración en un selecto etiqueta de Struts.

Respuesta

9

Un marco de trabajo Struts 1 no funcionará correctamente con las características de Java 5, ya que fue diseñado para trabajar con un JDK 1.4 también.

La última versión estable es Struts 1.3.10. El prerequisites de puntales 1.3.10 incluyen un kit de desarrollo de Java, versión 1.4 o posterior. Si se ejecuta en JDK 1.4 significa que no utiliza las características de Java 5, que incluye enumeraciones.

Puede usar enumeraciones en su propio código si usa al menos JDK 1.5 (está bien), Struts también se ejecutará en JDK 1.5 (ya que Sun intentó hacerlas compatibles con versiones anteriores) pero el marco en sí no lo sabe sobre las nuevas características agregadas al lenguaje. Por lo tanto, para las operaciones automáticas, como la asignación de parámetros de solicitud a las propiedades de ActionForm, no se obtendrá el resultado correcto.

7

sé que esto es una cuestión de edad, pero tuve el mismo problema y pensaba que iba a publicar la solución que he usado.

Básicamente, declaro la propiedad como una cadena y utilizan la Enum.valueOf() traducir.

Aquí es mi clase ActionForm:

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; 
    } 
} 

Y aquí es la JSP:

<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> 

Y, finalmente, la Acción:

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; 
    } 
} 
Cuestiones relacionadas