Чтобы избежать этой проблемы, используйте nextLine();
сразу после nextInt();
, поскольку это помогает очистить буфер. Когда вы нажимаете ENTER
, nextInt();
не захватывает новую строку и, следовательно, позже пропускает код Scanner
.
Scanner scanner = new Scanner(System.in);
int option = scanner.nextInt();
scanner.nextLine(); //clearing the buffer
Это потому, что вкладка - это именование контейнера, а ваше обновление должно быть update="Search:insTable:display"
. Что вы можете сделать, просто разместите свое диалоговое окно вне формы и все еще внутри вкладки, тогда оно будет: update="Search:display"
Попробуйте изменить update="insTable:display"
на update="display"
. Я считаю, что вы не можете префикс id с идентификатором формы.
в первую очередь: насколько я знаю, что размещение диалогового окна внутри табуляции является плохой практикой ... вам лучше вытащить его ...
и теперь на ваш вопрос:
извините, мне потребовалось некоторое время, чтобы получить то, что именно вы хотели реализовать,
сделал это сейчас в моем веб-приложении, и он работает
, как я уже говорил, : диалоговое окно `p: tabView,
покидает диалог p:, как вы первоначально предположили:
<p:dialog modal="true" widgetVar="dlg">
<h:panelGrid id="display">
<h:outputText value="Name:" />
<h:outputText value="#{instrumentBean.selectedInstrument.name}" />
</h:panelGrid>
</p:dialog>
, а командная ссылка p: должна выглядеть так (все, что я сделал это изменить атрибут обновления)
<p:commandLink update="display" oncomplete="dlg.show()">
<f:setPropertyActionListener value="#{lndInstrument}"
target="#{instrumentBean.selectedInstrument}" />
<h:outputText value="#{lndInstrument.name}" />
</p:commandLink>
то же самое работает в моем веб-приложении, и если это не сработает для вас, то я думаю, что что-то не так в вашем java-компоненте ...