有什么方法可以将下面的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>
答案 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.jactivite
是form.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标记重新设计代码(如果您真的需要它们)。