【问题标题】:Display a list in a Struts 1 form在 Struts 1 表单中显示列表
【发布时间】:2013-03-05 17:01:57
【问题描述】:

我必须编写一个后台页面,以确定哪些商店必须在 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、一个html:checkbox 和可能一个html: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 字段的值,实际上,它是初始值,在我在显示的表单中更改它之前。有点令人费解……

编辑:

实际上,&lt;html:checkbox name="boutique" property="selected" value="id" /&gt; 在最终的 HTML 中显示为 &lt;input type="checkbox" name="selected" value="id"&gt;,用“id”代替 id 值。但我不知道如何解决这个问题......

【问题讨论】:

    标签: java struts taglib struts-1


    【解决方案1】:

    以下是您应该做的事情。 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>
    

    【讨论】:

      【解决方案2】:

      最后,我根本没有使用 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-23
        • 1970-01-01
        • 2014-02-07
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多