2014-10-30 98 views
1

什么是可能的方式转换下面的struts 1代码迁移到struts 2.我知道s:select标签,但如何整合c:foreach jstl在那?Dropdown struts 2

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

回答

0

您应该删除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标签重新设计你的代码(如果你真的需要它们的话)。

1

所有的代码都可以用同样的功能在被压扁:

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

所以你不需要在foreach可言。但是,如果你需要它,然后使用<s:iterator>(与JSTL的<c:forEach>的struts2等效标签)。

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