Нужен логический преобразователь Struts2 для Да, Нет, Пустые значения
Мне нужно сохранить данные на основе значения, выбранного в элементе формы пользовательского интерфейса
<s:select key="invoice.productSold" list="${productSold}" />
ProductSold раскрывающийся список значений ''(пусто), 'Да', 'Нет'.
Мой логический преобразователь
public class BooleanConverter extends StrutsTypeConverter {
@Override
/*From form*/
public Object convertFromString(Map context, String[] values, Class toClass) {
String value = values[0];
if (value == "") {
System.out.println("null");
return null;
}
if ("No".equalsIgnoreCase(value) || "0".equals(value)) {
return "false";
} else if ("Yes".equalsIgnoreCase(value) || "1".equals(value)) {
return "true";
} else {
return null;
}
}
@Override
public String convertToString(Map context, Object o) {
Boolean value = (Boolean) o;
return String.valueOf(value);
}
}
public class Invoice{
Boolean productSold;
<getter>
<setter>
}
вопросы
- Моя выпадающая форма выбирает "Да" и обновляется; после обновления мой выпадающий список не показывает "Да". Отображается пустым.
- Метод ConvertFromString, возвращающий "true" при выборе "Да" в форме, и метод ConverToString, возвращающий "false".
Класс действий
public UpdateAction extends ActionSupport{
protected List<String> productSold;
public List<String> getProductSold() {
List<String> myOptions= new ArrayList<String>();
myOptions.add("");
myOptions.add("Yes");
myOptions.add("No");
return myOptions;
}
2 ответа
Вам не нужен пользовательский логический преобразователь, используйте функцию интернационализации Struts2 для получения "хороших" текстов для логических выражений. Положил true = Yes
а также false = No
в свойствах ваших сообщений, а затем использовать listValue
атрибут <s:select>
тег для вызова getText
метод получения сообщений для true
а также false
,
<s:select key="invoice.productSold" list="productSold" listValue="%{getText(top)}"/>
Кстати, вам не нужно использовать какие-либо "специальные" обозначения внутри list
атрибут для получения значения из стека значений.
Кстати № 2: вам это не нужно productSold
метод внутри вашего действия, вместо этого вы можете определить свой список да / нет прямо в JSP, используя нотацию OGNL для списков {...}
,
<s:select key="invoice.productSold" list='{"", true, false}' listValue="%{getText(top)}"/>
Попробуй это:
public UpdateAction extends ActionSupport{
protected Map<Object, String> productSold;
public Map<Object, String> getProductSold() {
Map<Object, String> myOptions= new HashMap<>();
myOptions.put(null, "");
myOptions.put(Boolean.TRUE, "Yes");
myOptions.put(Boolean.FALSE, "No");
return myOptions;
}
И в JSP:
<s:select key="invoice.productSold" listKey="productSold.key"
listValue="productSold.value"/>