2016-03-07 4 views
2

У меня чертовски время с чем-то, что должно быть предельно простым. Я использую плагин Struts2 JQuery, и у меня есть <sj:select> на моей странице. Он установлен в multiple. У меня есть массив значений, которые я хочу предварительно выбрать, но ничего не задано. Если я дам ему один элемент в теге значений, этот единственный элемент будет выбран. Если я передаю ArrayList из Integers или Collection из Integer (все еще экземпляр ArrayList) или строку с разделителями-запятыми («100,101,102») в значение, ничего не выбрано. Я пробовал передать простой массив целых чисел (Integer[]), и это по крайней мере будет выбирать первый элемент в массиве, но это все. Все остальные, очевидно, отброшены. Я не могу понять, что я делаю неправильно, или что я могу сделать, чтобы сделать эту работу.Struts2 Jquery Multiple Select Value

<sj:select 
    href="%{myStrutsJSONAction}" 
    id="itemSelect" 
    formIds="editForm" 
    reloadTopics="reloadItem" 
    name="selectedString" 
    list="availableItems" 
    listKey="id" 
    listValue="description" 
    multiple="true" 
    cssClass="form-control" 
    value="selectedIds" 
    /> 

Это было первоначально регулярным Struts2 выберите (<s:select>) и работал прекрасно с ArrayList из Integers переданного значения тега. Я изменил версию JQuery, потому что мне нужно, чтобы данные перезагружались на основе значения отдельного списка.

reloadTopics работает отлично, данные заселяются, а когда форма отправляется, все мои выборы корректно передаются обратно на сервер. Но при загрузке страницы ничего не выбрано.

+1

Скважина смысл Struts2 JQuery плагин запутывает простую библиотеку JavaScript. Вы можете использовать библиотеку пользовательского интерфейса, поддерживающую плагин, с меньшей головной болью, чем плагин предлагает исправить, за исключением тех, кто пообещал делать веб-программирование, избегая при этом изучения JavaScript. – Quaternion

+0

У меня нет проблем с внедрением javascript. Фактически, я уже сделал именно это и вручную достиг того же конечного результата. Но это похоже на грубое обходное решение, и я не вижу ничего, что указывает на то, что это ошибка в плагине. Я действительно хочу знать, где проблема. Я что-то не так с моей настройкой, или тег значения для multi-select struts-jquery просто не работает? Плагин был действительно утончен, но я никогда не сталкивался с чем-то, чего я не мог в конечном итоге выяснить. –

+1

Использование этих тегов - это взломать ... Если использование JS выглядит как взломанный, перераспределение, вероятно, в порядке. JavaScript может быть очень читаемым и с точки зрения обслуживания, JS гораздо более доступен, чем эти теги. С точки зрения ценности время, потраченное на изучение любой библиотеки JS, время лучше потрачено. Ну, я сделал свою роль и сказал, что «так происходит безумие!» но если вы настаиваете на том, что на этой странице все выработано, хотя я четко указал, что я не поклонник, меня впечатляет захватывающая документация, поддерживающая его: http://struts.jgeppert.com/struts2-jquery-showcase /index.action – Quaternion

ответ

1

Рассматривая исходный код плагина, кажется, что предварительный выбор нескольких значений сразу не поддерживается прямо сейчас.

Вы можете зарегистрировать новый выпуск в the GitHub repo этого плагина.

Что касается обходного пути, вы можете, вероятно, сделать это с помощью некоторого дополнительного кода JavaScript.

+0

Хорошо, спасибо вам за разъяснение. –

1

Правильный ответ на вопрос. Я просто отправляю обходной путь, если у кого-то такая же проблема.

Самое быстрое и простое решение - поместить ваши значения в строку с разделителями-запятыми, которая будет отправлена ​​на страницу.

public String strutsActionToLoadPage() { 
    List<Integer> selectedItemIds = new ArrayList<Integer>(); 
    /* 
    * Prepare your data for the page 
    */ 

    /* 
    * Set up the comma-delimited string 
    */ 
    this.selectedItemString = ""; 
    for (int y = 0; y < (selectedItemIds.size()-1); y++) { 
     this.selectedItemString += selectedItemIds.get(y) + ","; 
    } 
    if (!selectedItemIds.isEmpty()) { 
     this.selectedItemString += selectedItemIds.get(selectedItemIds.size()-1); 
    } 
    return SUCCESS; 
} 

public String getSelectedItemString() { 
    return this.selectedItemString; 
} 
public void setSeletedItemString(String selectedItemString) { 
    this.selectedItemString = selectedItemString; 
} 

Затем, используя JavaScript, преобразовать строку в массив и установите val() в <sj:select> элемента, когда документ будет готов.

$(document).ready(function() { 
    var data = '<s:property value="selectedItemString" />'; 

    //Make an array, splitting on the commas 
    var dataArray = data.split(","); 

    // Set the value 
    $("#itemSelect").val(dataArray); 
}); 

This question помог мне с этим.

Меньше, чем идеальный, но функциональный.

0

Split Строка переменной с помощью JQuery в JSP

$(document).ready(function() { 

    var subAns = $("#submitedAnswer").val(); 

    var toSplit = subAns.split(","); 
    for (var i = 0; i < toSplit.length; i++) { 
     console.log(toSplit[i]); 
    .......... 
    .......... 
    } 
});