Элементы формы с одинаковыми именами недоступны при использовании CF MX7 - PullRequest
0 голосов
/ 19 мая 2011

Я использую Coldfusion MX7 и имею базовую форму, которая может иметь несколько элементов, которые динамически добавляются в форму. Им присваивается одно и то же имя, и все они имеют флажки. Пример формы следующий:

<form action="index.cfm?action=index.report" method="post" id="reportForm">
<div class="report my">
    <ul class="connectWith ui-sortable" id="fieldListSelect" aria-disabled="false">
        <li class="field" id="field_profileFn" style="">
            <a class="action" id="action_profileFn" href="index.cfm?action=index.filter.profileFn" style="display: block; ">filter</a> 
            <label for="profileFn">First Name</label>
            <input type="checkbox" name="reportItem" id="profileFn" value="profileFn">
        </li>
        <li class="field" id="field_profileSn" style="">
            <a class="action" id="action_profileSn" href="index.cfm?action=index.filter.profileSn" style="display: block; ">filter</a> 
            <label for="profileSn">Surname</label>
            <input type="checkbox" name="reportItem" id="profileSn" value="profileSn">
        </li>
        <li class="field" id="field_contactDate" style="">
            <a class="action" id="action_contactDate" href="index.cfm?action=index.filter.contactDate" style="display: block; ">filter</a> 
            <label for="contactDate">Contact date</label>
            <input type="checkbox" name="reportItem" id="contactDate" value="contactDate">
        </li>
    </ul>
</div>
</form>

После отправки формы я получаю через cfdump следующее:

<table class="cfdump_struct">
    <tr><th class="struct" colspan="2" onClick="cfdump_toggleTable(this);" style="cursor:hand;" title="click to collapse">struct</th></tr>

        <tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">CONTACTDATE_FROM</td>
        <td>  Thu May 19 2011 00:00:00 GMT+0100 (GMT Daylight Time) </td></tr> 
        <tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">CONTACTDATE_TO</td>
        <td> Thu May 19 2011 00:00:00 GMT+0100 (GMT Daylight Time) </td></tr> 
        <tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">FIELDNAMES</td>
        <td> REPORTITEM[],CONTACTDATE_FROM,CONTACTDATE_TO </td></tr> 
        <tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">REPORTITEM[]</td>
        <td> profileFn,profileSn,contactDate </td></tr> 
    </table>

Сообщается элемент REPORTITEM [], и при попытке получить доступ к нему как к переменной я получаю:

<cfset testing = form.reportItem[]>

Invalid CFML construct found on line 6 at column 50.

Пытаясь получить доступ к переменной так, как я ожидал, я получаю следующее:

<cfset testing = form.reportItem>

Element REPORTITEM is undefined in FORM.

Я унаследовал этот код, и он ДОЛЖЕН работать ранее. Coldfusion не был обновлен (очевидно, все еще CF 7), и ничто другое не изменило серверную сторону, о которой я могу думать.

Мои вопросы:

  • Это всего лишь ограничение CF7?
  • Это должно работать правильно или это совершенно неправильно?
  • Мне придется переписать довольно много этого кода, если это просто не сработает, обработать это после публикации данных будет проще для кода. Изменение формы будет более трудоемким, так возможно ли это?

Ответы [ 3 ]

3 голосов
/ 19 мая 2011

Попробуйте сделать

<cfset testing = form["reportItem[]"]>

Это приведет к извлечению структуры формы по ключу "reportItem []".

0 голосов
/ 20 мая 2011

Публикуете ли вы через jQuery ajax или используете обычную кнопку отправки. Я думаю, что jQuery добавляет variablename [] во время публикации, но есть способ отключить его. Но в случае кнопки отправки я получу флажок только в структуре формы, только если установлен хотя бы один флажок. В этом случае всегда используйте имя флажка cfparam со значением по умолчанию.

0 голосов
/ 19 мая 2011

Насколько я знаю, у CF7 с этим проблем нет. На самом деле, я уверен, что значение ваших флажков создается браузером, а не веб-сервером или CF.

Вот что я вижу:

form.variableNamve[]

не будет работать, потому что значение возвращается в виде списка через запятую.

Вы столкнетесь с неопределенной ошибкой, если флажки не установлены, поскольку, если флажки с этим именем не установлены, эта переменная не будет передана браузером и, следовательно, не будет существовать в области формы. Вы должны по умолчанию это, и есть несколько способов сделать это.

Вы можете создать новую структуру с именем флажка в качестве ключа, пустой строкой в ​​качестве значения, а затем structAppend области видимости формы поверх нее.

Вы можете использовать традиционный тег cfparam.

В форму можно добавить скрытое поле формы с тем же именем и пустой строкой в ​​качестве значения. Это заставляет браузер возвращать поле формы, даже если флажки не установлены.

НТН.

...