我必须编写一个后台页面,以确定哪些商店必须显示在前台页面上,在 Struts 1 应用程序中。所以我有一个包含在表格中的商店列表(代码中的精品店)。
表格:
public class ListeBoutiquesForm extends ActionForm {
private List<Boutique> boutiques = new ArrayList<Boutique>();
public List<Boutique> getBoutiques() {
return boutiques;
}
public void setBoutiques(List<Boutique> boutiques) {
this.boutiques = boutiques;
}
}
和保存动作:
public ActionForward sauverBoutiques(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ListeBoutiquesForm vlbf = (ListeBoutiquesForm) form;
for (Boutique boutique : vlbf.getBoutiques()) {
boutiqueService.updateBoutique(boutique);
}
request.getSession().removeAttribute("ListBoutiques");
return listeSites(mapping, form, request, response);
}
Boutique 类包含一个 id、一个名称和一个名为“selected”的布尔值。我想为我的精品店列表的每个元素显示一个带有复选框的名称,以及一个调用我的保存操作的提交按钮,但是我缺乏编写 JSP 的 Struts taglib 知识。你能帮我吗?我知道它应该涉及 a logic:iterate
, ahtml:checkbox
并且可能是 ahtml:hidden
来存储 id,但我觉得缺少一些东西并且有些东西我不明白。可以这么说,它们是如何联系在一起的?如何在我的保存操作中取回具有更新值的 ListeBoutiquesForm?
编辑:
按照 Susie 的建议,我想出了以下 JSP:
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<html:errors/>
<html:form action="/admin/boutiqueviparis">
<input type="hidden" name="reqCode" value="sauverBoutiques" />
<table class="tableStatic noHead">
<logic:notEmpty name ="viparisListeBoutiquesForm" property="boutiques">
<logic:iterate id="boutique" name ="viparisListeBoutiquesForm" property="boutiques">
<tr>
<td>
<html:hidden name ="boutique" property="id" />
<bean:write name="boutique" property="nom" />
</td>
<td>
<html:checkbox name="boutique" property="selected" value="true" />
</td>
</tr>
</logic:iterate>
<html:submit styleClass="boutonrouge" value="Valider" onclick="this.form.reqCode.value='sauverBoutiques';return window.confirm('Modification validée');"/>
</logic:notEmpty>
</table>
</html:form>
这将显示商店列表和复选框,这些复选框将根据“选定”字段的值进行检查。但是我的保存操作不起作用。如果有人有想法,这是我的保存操作:
public ActionForward sauverBoutiques(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ViparisListeBoutiquesForm vlbf = (ViparisListeBoutiquesForm) form;
for (Boutique boutique : vlbf.getBoutiques()) {
log.debug("########## BOUTIQUE nom : "+boutique.getNom()+" selected :"+boutique.isSelected());
boutiqueService.updateBoutique(boutique);
}
request.getSession().removeAttribute("viparisListBoutiques");
return listeSites(mapping, form, request, response);
}
我可以在我的 Hibernate 日志中看到更新语句,但实际上没有保存任何内容。我记录了我的selected
字段的值,实际上,它是初始值,在我在显示的表单中更改它之前。有点莫名其妙...
编辑:
实际上,<html:checkbox name="boutique" property="selected" value="id" />
在最终的 HTML 中显示为<input type="checkbox" name="selected" value="id">
,带有“id”而不是 id 值。但我不知道如何解决这个问题......