1

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:iterateID を保存するために 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」が使用されます。しかし、私はこれを解決する方法がわかりません...

4

2 に答える 2

4

以下は、あなたがしなければならないことです。struts-config.xml ファイルは、すべてをまとめた構成ファイルです。

parameter ---> which method to call
name---> name of the action form
path---> URL
type---> action class that is invoked by the above url. 
forward---->where to forward once it's done.

ご覧のとおり、myMethod() でリストを設定し、以下の jsp でアクセスします。

JSP ページ:

   <form name="myForm" action="myAction.do" method="post">
        <logic:notEmpty name="myForm" property="myList">
                    <logic:iterate id="boutique" name="myForm" property="myList"            type="com.Boutique">                
                        <tr>
                            <td><bean:write name="boutique" property="id" /> </td>
                            <td><bean:write name="boutique" property="name" /></td>
                            <td><bean:write name="boutique" property="selected" /></td>
                        </tr>
                    </logic:iterate>
        </logic:notEmpty> 
    </form>

私のアクションクラスメソッドでは:

public ActionForward myMethod(ActionMapping actionMapping,
                ActionForm myForm, HttpServletRequest httpServletRequest,
                HttpServletResponse httpServletResponse) throws Exception {
                List<Boutique> myList = new ArrrayList<Boutique>();
                form.setMyList(myList);
                            return mapping.findForward("success");

}

struts-config.xml

<struts-config>
    <form-beans>
        <form-bean name="myForm" type="com.usps.nom.tops.web.struts.form.transportation.ITransportationInquiryDynaForm">
        </form-bean>
    </form-beans>
    <action-mappings>
        <action path="/myAction" type="com.MyAction"
                name="myForm" scope="session" validate="false"
                parameter="myMethod">               
                <forward name="success" path="tile.view"></forward>     
        </action>
    </action-mappings>
</struts-config>
于 2013-03-05T18:01:35.620 に答える
0

最後に、Struts の html:checkbox タグをまったく使用しませんでした。いくつかの調査の後、Struts 1 はチェックボックスをうまく処理していないようです...

それが私の現在の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>
                        <logic:equal name="boutique" property="selected" value="true">
                            <input type="checkbox" name="boutique_<bean:write name="boutique" property="id" />" value="<bean:write name="boutique" property="id" />" checked="1" />
                        </logic:equal>
                        <logic:equal name="boutique" property="selected" value="false">
                            <input type="checkbox" name="boutique_<bean:write name="boutique" property="id" />" value="<bean:write name="boutique" property="id" />" />
                        </logic:equal>
                    </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>
于 2013-03-11T10:10:07.743 に答える