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 の知識がありません。手伝ってくれますか?logic:iterate
ID を保存するために a 、 a 、html:checkbox
およびおそらく aを使用する必要があることはわかっていhtml:hidden
ますが、何かが欠けていて、理解できないものがあると感じています。それらはどのように結びついているのでしょうか。保存アクションで値が更新された 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 ログに update ステートメントが表示されますが、実際には何も保存されていません。フィールドの値をログに記録しましたが、selected
実際には、表示されたフォームで変更する前の初期値です。ちょっと不可解な...
編集:
実際には<html:checkbox name="boutique" property="selected" value="id" />
、最終的な HTML ではのように表示され<input type="checkbox" name="selected" value="id">
、id 値の代わりに「id」が使用されます。しかし、私はこれを解決する方法がわかりません...