下拉支柱2

时间:2014-10-30 12:13:32

标签: jsp struts2 jstl struts el

有什么方法可以将下面的struts 1代码转换为struts 2中的代码。我知道s:select tag但是如何整合c:foreach jstl呢?

<html:select property="acti" onchange="setActi(form);" style="width:45px">  
    <html:option value=""><s:text name="form.date" /></html:option>  
    <c:forEach items="${v}" var="var">  
        <c:if test="${not (var eq form.acti)}">  
            <option value="<c:out value="${var}"/>"><c:out value="${var}"/></option>  
        </c:if>  
        <c:if test="${var eq form.acti}">  
            <option selected value="<c:out value="${form.jacti}"/>"><c:out value="${form.acti}"/></option>  
        </c:if>  
    </c:forEach>  
</html:select>  

2 个答案:

答案 0 :(得分:2)

您的所有代码都可以使用相同的功能进行展平:

<s:select name = "activite" 
          list = "jour"    
     headerKey = ""
   headerValue = "getText(form.date.jour)"
         value = "form.activite"
      onchange = "setActivite(form);" 
      cssStyle = "width:45px"
/>

所以你根本不需要forEach。但是如果你需要它,那么使用<s:iterator>(struts2等效标记到JSTL&#39; s <c:forEach>)。

我假设form.jactiviteform.activite的拼写错误,如果不是,你必须用OGNL调整一下。顺便说一句,你为一个简单,直接的业务做了很多奇怪的事情,例如提供一个选择框(相同的键和值,所选对象的不同键和值,ecc ...)

答案 1 :(得分:1)

你应该删除Struts1标签,这就足够了。 Struts2可以使用JSTL,因此您可以减少迁移时间。

<select name="activite" value="<c:out value='${form.activite}'/>" onchange="setActivite(form);" style="width:45px">  
    <option value=""><s:text name="form.date.jour" /></option>  
    <c:forEach items="${jour}" var="varJour">  
        <c:if test="${not (varJour eq form.activite)}">  
            <option value="<c:out value="${varJour}"/>"><c:out value="${varJour}"/></option>  
        </c:if>  
        <c:if test="${varJour eq form.activite}">  
            <option selected value="<c:out value="${form.jactivite}"/>"><c:out value="${form.activite}"/></option>  
        </c:if>  
    </c:forEach>  
</select>  

请注意,此代码应该用于迁移目的。如果您正在开发一个新的应用程序,您可以花更多的时间使用struts标记重新设计代码(如果您真的需要它们)。