Несколько входов с одинаковым именем в стойках - PullRequest
1 голос
/ 11 ноября 2011

У меня есть форма с полем, которое может иметь от нуля до нескольких значений для именованного поля, например:

<form ...>
<input type="hidden" name="browseId[]" value="3">
<input type="hidden" name="browseId[]" value="4">
<input type="hidden" name="browseId[]" value="8">
<input type="hidden" name="browseId[]" value="10">

<input type="text" name="browseId[]">
...
</form>

Кажется, я не могу получить переменную browseId в виде массива, которая является стандартной операционной процедурой в HTML, других языках, и я в тупике. На самом деле я сначала обрабатываю вывод формы в методе валидации, используя DynaActionForm:

public static ActionMessages validatePlacement(DynaActionForm form) {
    String[] rootBrowseIds = (String []) form.get("browseId");
    ...
}

Вот пример компонента формы и определения действия в struts-config.xml:

<form-bean name="placementForm" type="org.apache.struts.validator.DynaValidatorForm">
    <!-- I've tried a few variations -->
    <!--<form-property name="browseId" type="java.lang.String"/>-->
    <!--<form-property name="browseIds" type="java.lang.String[]"/>-->
    <form-property name="browseId" type="java.lang.String[]"/>
    ...
</form-bean>

...

<action path="/admin/editPlacement"
        type="com.rc.mexp.action.admin.placementinventory.EditPlacementAction"
        name="placementForm">
    <forward name="success" path="/WEB-INF/pages/admin/placement/placementEdit.jsp"/>
    <forward name="error" path="/admin/managePlacementInventory.do"/>
</action>

Похоже, что только последнее значение, пустое в этом случае, принимается Struts. WTF?

Есть идеи?

Есть ли способ изменить мое определение bean-компонента для включения чего-то подобного? Я не могу использовать символы < и > внутри типа:

<form-property name="browseId" type="java.util.Map<java.lang.String[]>"/>

Другие вопросы о переполнении стека, которые я уже исследовал:
извлечение нескольких входов с одинаковыми именами из jsp в стойки (не актуально)
Несколько входов с одинаковым именем через POST в php
Struts 2 - шаблон / стратегия для нескольких объектов на одной странице

1 Ответ

1 голос
/ 11 ноября 2011

Вы неправильно обращаетесь к полю формы, вам следует использовать getStrings("browseId"), поскольку вы пытаетесь получить несколько строк.

Ваш код даже не скомпилируется для меня, я не уверенпочему вы не получаете исключение приведения класса.

...