#java #jsf-2
#java #jsf-2
Вопрос:
ОБНОВЛЕНИЕ: я обновил здесь для ясности, вместо того, чтобы писать в комментариях или делать сообщение с ответом.
Это часть того, как выглядит код, с которым будут работать эти кнопки:
Я сделал кнопки такими:
<h:commandButton value="Delete" onclick="return addBackspace();">
<f:ajax execute="@form" render="formula"/>
</h:commandButton> //the backspace button
Текстовая область:
<h:inputTextarea id="formula" value="#{output.formula}" />
Я сделал несколько простых кнопок, которые записывали бы их значение в текстовую область, чтобы пользователь видел формулу по мере ее построения:
<h:commandButton value=" " onclick="return checkButtons(this.value);">
<f:ajax execute="@form" render="formula"/>
</h:commandButton>
Я не совсем уверен в части ajax, которую я туда вставил, использовал ее, чтобы остановить обновление страницы при каждом нажатии.
И поля выбора, которые я использую, которые сейчас имеют некоторые жестко заданные значения, но в конечном итоге будут заполнены данными, взятыми из WS.
Property:
<h:selectOneMenu value ="#{output.propertyReferenceValue}" id="selectTwo" onchange="return checkItem(this.value);">
<f:selectItems value="#{property.propertyReference.keySet()}"/>
</h:selectOneMenu>
Теперь, если я сделаю текстовую область отключенной или доступной только для чтения, я все равно смогу записать в нее содержимое selctBoxes (что хорошо), но если я попробую простые кнопки, такие как » «, их значение просто появится быстро, а затем так же быстро исчезнет. Если я попробую backspace , он удалит все содержимое текстовой области, то же самое, если я помещу часть содержимого полей выбора в текстовую область, а затем, если я нажму кнопку » » (например), все содержимое области будет удалено. Я все еще копаюсь в коде, чтобы понять, что заставляет его вести себя таким образом 🙂
КОНЕЦ ОБНОВЛЕНИЯ
Можно ли создать в JSF несколько командных кнопок, которые будут работать с inputTextArea так же, как клавиши «Enter» и «Backspace»? Например:
Кнопка «Enter» при нажатии переместит курсор на новую строку текстовой области. Кнопка «Backspace» удалит следующую букву или пробел, который находится за курсором.
Я некоторое время искал, но, похоже, нашел только подробности о том, как заставить весь текст исчезнуть.
Спасибо, Дэниел
Комментарии:
1. Ну, мне удалось сделать «кнопку ввода» такой: document.getElementById(«texAreaId»).value =»n»; . Все еще пытаюсь разобраться с «кнопкой возврата»
Ответ №1:
Вы могли бы просто использовать JavaScript для этого.
Например.
<h:inputTextarea id="textarea" binding="#{textarea}" value="#{bean.text}" />
<input type="button" value="Enter" onclick="addEnter('#{textarea.clientId}')" />
<input type="button" value="Backspace" onclick="addBackspace('#{textarea.clientId}')" />
с помощью этих функций
function addEnter(textareaId) {
var textarea = document.getElementById(textareaId);
textarea.value = 'n';
textarea.focus();
}
function addBackspace(textareaId) {
var textarea = document.getElementById(textareaId);
textarea.value = textarea.value.substring(0, textarea.value.length - 1);
textarea.focus();
}
Комментарии:
1. Связанный с этим вопрос: если я сделаю текстовую область «отключенной», addBackspace удалит все ее содержимое. Можно ли изменить addBackspace, чтобы по-прежнему удалять в соответствии с положением курсора (не уверен в этом, поскольку текстовая область отключена, курсор идет с ней, насколько я могу судить) или заставить его удалить последнее слово?
2. Интересно, я не могу воспроизвести вашу проблему в FF6, IE7 / 8 / 9 и GC13. Какой браузер вы используете?
3. Я использую последнюю версию Google Chrome.
4. Я обновился до GC14, но я все еще не могу его воспроизвести. Возможно, в вашем коде есть что-то еще, что противоречит этому?
5. к сожалению, я не могу проверить это прямо сейчас, но я сделаю это утром и обновлю это сразу после.