Как заставить управляемый бин ожидать ввода пользователя - JSF - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь реализовать страницу JSF, в которую пользователь должен вставить некоторые данные. В частности, при нажатии кнопки должно появиться диалоговое окно с запросом ввода пользователем. Основная проблема заключается в том, что выполнение компонента поддержки должно быть остановлено в ожидании ответа пользователя.

Примером игрушки является следующий.

Страница JSF:

        <h:form id="label">
            <p:dialog header="User input" widgetVar="dlg2"
                visible="true" modal="false"
                resizable="false" height="100" width="300">
                <br />
                <h:inputText value="#{userInputMB.userInput}"></h:inputText>
            </p:dialog>
            <p:commandButton action="#{userInputMB.pressButton}"></p:commandButton>
        </h:form>

UserInputMB:

package jsfpackage;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class UserInputMB {
    private String userInput;
    private boolean visualizeDialog = false;

    public UserInputMB() {

    }

    public void pressButton() {
        System.out.println("Executing the pressButton method..");
        //here I need to visualize the dialog and wait for the user input
        System.out.println(userInput);
    }
    public String getUserInput() {
        return userInput;
    }

    public void setUserInput(String userInput) {
        this.userInput = userInput;
    }

    public boolean isVisualizeDialog() {
        return visualizeDialog;
    }

    public void setVisualizeDialog(boolean visualizeDialog) {
        this.visualizeDialog = visualizeDialog;
    }
}

В этом примере при нажатии кнопки , метод pressButton должен визуализировать диалоговое окно и ждать ввода пользователя, а затем продолжить выполнение.

Я также нашел такой же вопрос по stackoverflow: Синхронный вызов диалога из управляемого компонента

но моя ситуация совсем другая. Я вынужден реализовать такое поведение. Заранее спасибо!

1 Ответ

2 голосов
/ 30 апреля 2020

Следующий пример содержит диалог и кнопку. Кнопка готовит ввод и открывает диалог. В диалоговом окне вторая кнопка вызывает действие для обработки ввода.

JSF:

<!-- dialog for input -->
<p:dialog id="inputDialog" widgetVar="inputDialog" header="Input here">
    <p:inputText value="#{userInputMB.userInput}" />
    <p:commandButton action="#{userInputMB.processInput}" />
</p:dialog>

<!-- Calls the action to prepare the input and updates and opens the dialog -->
<p:commandButton value="show dialog" action="#{userInputMB.prepareInput}"
                 oncomplete="PF('inputDialog').show()" process="@this" update=":inputDialog" />

Bean:

@ManagedBean
@SessionScoped
public class UserInputMB {

    private String userInput;

    public void prepareInput() {
        userInput = "Please enter your input here";
    }

    public void processInput() {
        if("inputYouWanted".equals(userInput)) {
            System.out.println("hurray, correct input!");
        }
    }

    public String getUserInput() {
        return userInput;
    }

    public void setUserInput(String userInput) {
        this.userInput = userInput;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...