[ 
https://issues.apache.org/jira/browse/OFBIZ-3650?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Blas Rodriguez Somoza closed OFBIZ-3650.
----------------------------------------

    Resolution: Later

working on it

> XHTML Validation - Form Widget with type= list|multi and 
> separate-columns="true" renders bad markup
> ---------------------------------------------------------------------------------------------------
>
>                 Key: OFBIZ-3650
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-3650
>             Project: OFBiz
>          Issue Type: Bug
>          Components: framework
>    Affects Versions: SVN trunk
>            Reporter: Blas Rodriguez Somoza
>             Fix For: SVN trunk
>
>
> Widgets with separate-columns="true" could generate bad markup.
> The problem exists in the header and item rows
> For the item rows:
> ModelForm.java (lines starting at 1269)
>                 if (innerFormFields.size() > 0) {
>                     // TODO: manage colspan
>                     
> formStringRenderer.renderFormatHeaderRowFormCellOpen(writer, context, this);
>                     Iterator<ModelFormField> innerFormFieldsIt = 
> innerFormFields.iterator();
>                     while (innerFormFieldsIt.hasNext()) {
>                         ModelFormField modelFormField = 
> innerFormFieldsIt.next();
>                         if (separateColumns || 
> modelFormField.getSeparateColumn()) {
>                             
> formStringRenderer.renderFormatItemRowCellOpen(writer, context, this, 
> modelFormField, 1);
>                         }
>                         // render title (unless this is a submit or a reset 
> field)
>                         formStringRenderer.renderFieldTitle(writer, context, 
> modelFormField);
>                         if (separateColumns || 
> modelFormField.getSeparateColumn()) {
>                             
> formStringRenderer.renderFormatItemRowCellClose(writer, context, this, 
> modelFormField);
>                         }
>                         if (innerFormFieldsIt.hasNext()) {
>                             // TODO: determine somehow if this is the last 
> one... how?
>                            if (!separateColumns && 
> !modelFormField.getSeparateColumn()) {
>                                 
> formStringRenderer.renderFormatHeaderRowFormCellTitleSeparator(writer, 
> context, this, modelFormField, false);
>                            }
>                         }
>                     }
>                     
> formStringRenderer.renderFormatHeaderRowFormCellClose(writer, context, this);
>                 }
> and from htmlFormMacroLibrary.ftl
> renderFormatHeaderRowFormCellOpen translates to "<td ....>"
> renderFormatItemRowCellOpen translates to "<td .....>"
> renderFormatItemRowCellClose translates to "</td>"
> renderFormatHeaderRowFormCellClose translates to "</td>"
> if the conditions (innerFormFields.size() > 0) and (separateColumns || 
> modelFormField.getSeparateColumn()) are meet then the rendered markup will be:
> <td>
> <td>...field </td>
> <td>...field </td>
> ...
> </td>
> Which is a wrong markup code.
> The browser usually will close the first duplicated <td> creating a new cell 
> and remove the duplicated </td>.
> Due to this error, a phantom column will appear in the list (see the forum 
> list in Content -> Forum)
> The only solution I know for this issue maintaining the form parameter names, 
> needs some javascript.
> The idea is you need two forms, the master one hidden which is outside the 
> table and will be used for the submit and another one which is the parent of 
> the table and contains the input/select/submit etc for each row.
> When a row submit button is clicked, it call a javascript function which 
> copies the values from the row to the master form and submit it.
> The following is an xhtml page implementing this idea.
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
> <html>
>  <head>
>   <title>Table with editable rows</title>
>  </head>
>  <body>
>  <form name="rowList" action="">
>       <input type="hidden" name="rowId" value=""/>
>       <input type="hidden" name="field1" value=""/>
>       <input type="hidden" name="field2" value=""/>
>       <input type="hidden" name="field3" value=""/>
>       <input type="hidden" name="field4" value=""/>
>  </form>
>  <script type="text/javascript">
>       function submit_rowList(rowId, ele1, ele2, ele3, ele4)
>       {
>               base_form = document.forms['rowList'];
>               table_form = document.forms['rowList_table'];
>               base_form.rowId.value =  rowId;
>               base_form.field1.value =  table_form.elements[ele1].value;
>               base_form.field2.value =  table_form.elements[ele2].value;
>               base_form.field3.value =  table_form.elements[ele3].value;
>               base_form.field4.value =  
> table_form.elements[ele4].options[table_form.elements[ele4].selectedIndex].value;
>               base_form.submit();
>       }
>  </script>
> <form name="rowList_table" action="">
>       <table>
>               <tr>
>                       <td>
>                               <input type="text" name="field1_0" value="A0"/>
>                       </td>
>                       <td>
>                               <input type="text" name="field2_0" value="B0"/>
>                       </td>
>                       <td>
>                               <input type="text" name="field3_0" value="C0"/>
>                       </td>
>                       <td>
>                               <select name="field4_0">
>                                       <option selected="selected">choose 
> 1</option>
>                                       <option>choose 2</option>
>                               </select>
>                       </td>
>                       <td>
>                               <input type="button" name="boton_0" 
> onclick="javascript:submit_rowList(0,'field1_0','field2_0', 'field3_0', 
> 'field4_0');"/>
>                       </td>
>               </tr>
>               <tr>
>                       <td>
>                               <input type="text" name="field1_1" value="A1"/>
>                       </td>
>                       <td>
>                               <input type="text" name="field2_1" value="B1"/>
>                       </td>
>                       <td>
>                               <input type="text" name="field3_1" value="C1"/>
>                       </td>
>                       <td>
>                               <select name="field4_1">
>                                       <option>choose 1</option>
>                                       <option selected="selected">choose 
> 2</option>
>                               </select>
>                       </td>
>                       <td>
>                               <input type="button" name="boton_0" 
> onclick="javascript:submit_rowList(1,'field1_1','field2_1', 'field3_1', 
> 'field4_1');"/>
>                       </td>
>               </tr>
>       </table>
> </form>
> </body>
> </html>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to