2008-11-10 2 views
0

проблема заключается в том, что у меня есть два набора значений в выпадающем списке. Если выбран тип «A», я хочу, чтобы текстовое поле было заполнено значением из базы данных и было только для чтения. Если выбрано «B», поле должно быть пустым и редактироваться.Перезагрузите страницу, не отправив ее обратно на сервер

Мой исходный код написан на JSP/распорок и я вроде достиг этого с помощью

onchange="javascript:submit()" перезагрузить страницу, но это имеет очевидный недостаток сохранения каких-либо изменений, внесенных означает, что вы можете» t действительно отменить.

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

Есть ли способ сделать перезагрузку страницы jsp на изменение, таким образом я мог бы написать javascript, чтобы изменить способ отображения страницы в соответствии со значениями, содержащимися в сеансе. Таким образом, функция save/submit будет вызываться только тогда, когда страница будет правильно заполнена, а проверка на стороне сервера будет работать так, как было запланировано.

Я знаю, что это то, что AJAX умеет делать, но я стараюсь избегать его, если это возможно.

+0

Я думаю, вопрос: почему вы хотите избежать Ajax? Embracing Ajax открывает совершенно новый мир возможностей не только для вашего приложения, но и для вашего собственного набора навыков. Массивный контроль, который вы ищете, - это то, что идеально подходит для Ajax. – 2008-11-10 17:44:47

ответ

2

AJAX - это ваш единственный вариант, мой друг, если только на исходной загрузке страницы вы загружаете все другие возможные значения текстового поля, поэтому вам не нужно возвращаться в базу данных. Ну, вы можете попробовать разместить текстовое поле в IFRAME, но вы, вероятно, столкнетесь с большим количеством проблем с этим подходом, чем просто с AJAX.

0

Без AJAX то, что вы просите, будет сложно. Другой вариант (который является уродливым) заключается в том, чтобы записать все возможные значения для второго списка в структуру данных, такую ​​как массив или словарь.

Затем напишите некоторый javascript, чтобы получить значения из структуры данных, когда пользователь выбирает из первого списка. Объем javascript, который вам нужно будет написать, чтобы сделать это, и сделать это правильно в кросс-браузере, будет намного сложнее, чем просто использовать AJAX.

0

Не знаете, почему вы пытаетесь избежать AJAX в сегодняшнем мире, библиотеки JS сегодня там делают это настолько просто, что это безумие, чтобы не попробовать.

Мне просто пришлось заменить страницу, написанную, как указал Винсент. Я предполагаю, что в то время это имело смысл для приложения, учитывая относительный размер данных 4 года назад. Теперь, когда приложение масштабировалось, страница занимала более 30 секунд, чтобы анализировать структуры данных неоднократно (возможно, плохо написано JS?).

Я заменил всю логику очень простым вызовом AJAX сервлету, который просто возвращает ответ JSON значений для 2-го падения вниз на основании того, что было передано ему, и ответ в основном мгновен.

Удачи вам.

0

Один из способов - изменить действие формы, чтобы отправить форму другому URL-адресу, чем «сохранить» URL-адрес. Это позволяет перезагрузить определенные аспекты формы и вернуться к самой форме, вместо того, чтобы передавать данные.

<script> 
    function reload() { 
    document.forms[0].action="reloadFormData.jsp"; 
    document.forms[0].submit(); 
    } 
</script> 
<form action="saveData.jsp" method="post"> 
    <select id="A" name="B" onchange="reload()"><!-- blah --></select> 
    <select id="B" name="B"><!-- blah B --></select> 
    <input type="submit"> 
</form> 
0

Я знаю TagLib, который может поместиться в вашей проблеме: AjaxTags. Я использую этот taglib в своих проектах J2EE, и его очень просто интегрировать в веб-приложения.

Этот taglib предоставляет вам несколько тегов, предназначенных для выполнения запроса AJAX в ваших jsp-файлах.

Вот описание каждого тегов: http://ajaxtags.sourceforge.net/usage.html

Тег, который поможет вам это Аякса: выберите тег. Он позволяет заполнять тег select, который зависит от другого поля, без перезагрузки всей страницы jsp.

Если у вас больше информации об этом, спросите меня, и я постараюсь ответить быстро.

0

Если вы правильно поняли, что хотите выпадающее меню (<select>) или текстовое поле (<input type="text">) в зависимости от выбора (как правило, флажка или радиокнопки) где-то выше в форме?

В таком случае вам может потребоваться обработать два типа ввода по-разному на сервере в любом случае, поэтому почему бы не иметь как selectbox, так и текстовое поле в области формы с разными именами и идентификатором, а один из них скрыт (display = none). Затем переключите видимость, когда выбор изменится. На сервере вы выбираете eiter вход selectbox или textarea (оба будут присутствовать, если вы не отключите их (disabled="disabled"), которые, как мне кажется, неслучайны) в зависимости от ввода выбора.

Конечно, если вы ожидаете, что пользователю обычно нужен только текстовый ввод и несколько раз, требующий массивного списка; было бы лучше использовать ajax для извлечения списка. Но если это наоборот (вам нужно текстовое поле только октально), как я предполагал выше, быстрее будет иметь оба присутствующих в исходной форме.

Если выпадающий список содержит легко сгенерируемые данные, например, через несколько лет после этого, он может быть намного быстрее (требуя меньшей пропускной способности на сервере) для создания клиентской стороны данных с использованием цикла for в Javascript.

0

Вдоль линий, что сказал Strindhaug, но если вам нужно динамические данные:

Может у вас есть бэкэнд запись JS в страницу, а затем JS изменит форму по мере необходимости? Бэкэнд может распространять некоторые переменные для описаний и т. Д., А затем JS может соответствующим образом изменять/обновлять форму. Если вы не знакомы с этим, такие библиотеки, как jQuery, делают такие вещи более легкими и более кросс-браузерными, чем ваши собственные (по крайней мере, в моем опыте).

Помимо этого: Если вы не используете AJAX, потому что это было сложно скомпоновать (поскольку я не на какое-то время, потому что мой первый опыт был с нуля и был некрасивым), как говорили другие, libs like MooTools и таким образом сделать это действительно легко. Кроме того, не стоит стыдиться при использовании AJAX правильно. У него плохой рэп, потому что люди делают с ним глупые вещи, но если вы не можете просто написать готовые значения в форму или вам нужно делать прямые просмотры, это одно из правильных видов использования AJAX.

Смежные вопросы