#jsf #primefaces #javabeans
#jsf #первичные #javabeans
Вопрос:
У меня есть следующий код jsf для ввода primefaces, который заполняется сканером штрих-кода. После каждого сканирования мне нужно что-то сделать в компоненте, очистить ввод и переориентироваться на него для следующего сканирования. Пока компонент работает нормально, но очистка — нет, и я еще не начал переориентироваться. Есть идеи?
<p:inputText id="testInput" value="#{barcodeHelper.barcodeData}" onkeyup="if (event.keyCode == 13){onchange(); return false;}">
<p:ajax listener="#{barcodeHelper.barListener()}" update="testInput" process="@this" event="change"/>
</p:inputText>
и слушатель делает это
public void barListener(){
if(barcodeData.length() == 13){
ean = barcodeData;
//Will do more
}
//other bar code Lengths will be dealt with maybe a switch is better
//clear the data just read
barcodeData = null;
}
Я нормально обращаюсь к слушателю, но, к сожалению update="testInput"
, он не работает. Чего мне здесь не хватает? Спасибо за вашу помощь.
Комментарии:
1. Что такое тело ответа ajax? Используйте Firebug / Chrome, чтобы увидеть это.
2. Просто пытаюсь разобраться с Firebug, поскольку я никогда не использовал его раньше. Я просмотрел с его помощью много полезных данных и могу видеть функцию ответа, но, похоже, не могу увидеть, каков ответ. Должен ли я устанавливать ответ в моем Java bean?
3. Ошибка Firebug.. вау, какая гениальная работа. Я обнаружил, что ответ пуст. Это проблема?
4. @BalusC Я попробовал еще несколько вещей и обнаружил, что update=»outText» для другого элемента работает нормально ` <h: outputText id=»outText» value=»#{barcodeHelper.ean}»/><h:outputText value=»»/>` Так же можно использовать простые интерфейсы AJAXпросто не обновлять вызывающий элемент таким образом?
Ответ №1:
Вам нужно опубликовать немного больше информации — перейдите в исходный код и посмотрите на рендеринг. Вы увидите что-то (мое предположение) вроде:
<input id="j_1231:testInput" />
В зависимости от настроек вам может потребоваться явно указать путь вашего обновления к компоненту в этом случае (опять же, предположение):FormID:componentID или :subviewId:FormID:componentID . Если ваш путь отключен, это должно быть быстрое решение.
— согласно комментарию Балуса
Если компонент регистрирует действие, вы можете использовать обратный вызов Primefaces для запуска метода Javascript. http://www.primefaces.org/showcase/ui/callbackParams.jsf
Комментарии:
1.
<p:ajax>
Находится внутри того же контейнера именования<p:inputText>
, что и , так что это не должно быть проблемой.2. Я пробовал оба этих подхода, но безрезультатно. Учитывая приведенный выше ответ BalusCs, я думаю, что обновление не вызывается из-за состояния ответа. Однако, когда я попытался использовать oncomplete для вызова javascript, я добирался до функции, но document.getElementById(«myform:testInput»). значение = «» также не сработало, поскольку я предположил (возможно, ошибочно), что значение beans принимало значения presidents. Все это очень запутанно.