2013-03-05 85 views
1

爲了確定哪些商店必須在Struts 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); 
} 

精品類包含 「選擇」 一個ID,一個名字和一個叫布爾值。我想用我的精品店列表中的每個元素的複選框顯示名稱,以及一個提交按鈕,用於調用我的保存操作,但我缺乏Struts taglib知識來編寫JSP。你能幫我嗎?我知道它應該涉及一個logic:iterate,一個html:checkbox和可能是html:hidden來存儲身份證,但我覺得缺少某些東西,並且有些東西我不明白。那些如何聯繫在一起,這麼說呢?如何在保存操作中獲取更新值的ListeBoutiquesForm?

編輯:

繼蘇茜的意見,我想出了下面的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的值。但我不知道如何解決這個問題...

+0

爲什麼downvote? – 2013-03-06 21:31:53

回答

3

以下是你應該做的事情。 struts-config.xml文件將所有東西粘合在一起的配置文件。你可以看到我在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> 
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> 
相關問題