Очистка ввода после вызова ajax

#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. Все это очень запутанно.