Как сделать так, чтобы параметры представления выдержали любые сбои проверки, вызванные формами, заключенными в представление для bean-компонента @RequestScoped?

индекс.xhtml:

    <f:metadata>
        <f:viewParam id="playernameparam" name="playernameparam" required="true" 
                requiredMessage="Player name required!" 
                value="#{playersBean.playerName}"/>            
        <f:viewParam id="playersurnameparam" name="playersurnameparam" required="true" 
                requiredMessage="Player surname required!" 
                value="#{playersBean.playerSurname}"/> 
    </f:metadata>
    <h:message for="playernameparam" />
    <h:message for="playersurnameparam" />
    <h:head>
        <title></title>
    </h:head>   
    <h:body>        
        <h:form>
            Enter name:<h:inputText value="#{playersBean.playerName}"/><br/>
            Enter surname:<h:inputText value="#{playersBean.playerSurname}"/><br/>
            For validation purpose: <h:inputText id="address" 
                    value="#{playersBean.address}" required="true" 
                    requiredMessage="Kindly fill your address location" /><br/>
            <h:message for="address" style="color:red" /><br/>
            <h:commandButton value="Submit" action="#{playersBean.action()}">
            </h:commandButton>
        </h:form>       
    </h:body>

результат.xhtml:

    <f:metadata>
        <f:viewParam name="playernameparam" value="#{playersBean.playerName}"/>            
        <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/> 
    </f:metadata>
    <h:head>
        <title></title>
    </h:head>   
    <h:body>        
        You requested name: <h:outputText value="#{playersBean.playerName}"/><br/>
        You requested surname: <h:outputText value="#{playersBean.playerSurname}"/>       
    </h:body>

Управляемый компонент:

@ViewScoped
@ManagedBean(name = "playersBean")
public class PlayersBean implements Serializable {

    private String playerName;
    private String playerSurname;
    private String address;
    // getters & setters

    public String action() {
        return "results?faces-redirect=true&includeViewParams=true";
    }
}

При попадании http://localhost:8080/Leonard/faces/ch2/index.xhtml?playernameparam=FARHAN&playersurnameparam=ANSARI

введите здесь описание изображения

Оставьте поле «Для проверки» пустым, чтобы вызвать ошибку проверки.

а затем нажмите кнопку.

Теперь введите что-нибудь в то же поле и снова нажмите Enter.

Он отлично работает, и параметры просмотра есть, и перенаправленный URL-адрес отражает как:

http://localhost:8080/Leonard/faces/ch2/results.xhtml?playernameparam=FARHAN&playersurnameparam=ANSARI

Конечно будет, так как бин @ViewScoped.

Но мой bean-компонент @RequestScoped вызывает проблему. Я потерял их, когда произошел сбой проверки, а затем последующий POST после удаления этой ошибки проверки с запросом POST, дающим этот результат:

введите здесь описание изображения

Итак, вопрос сводится к тому, как сохранить параметры запроса?


person Farhan Shirgill Ansari    schedule 20.03.2016    source источник
comment
Это полезно? stackoverflow.com/q/12314081   -  person BalusC    schedule 20.03.2016
comment
@BalusC: Как я могу быть таким глупым сегодня днем? Я пытался воспроизвести ваш пункт 5 для параметра просмотра в этом потоке > stackoverflow.com/questions/4888942/. Я вставляю f:param только для одного параметра, хотя в моем вопросе их было два. Глупая ошибка.   -  person Farhan Shirgill Ansari    schedule 20.03.2016
comment
@BalusC: Тем не менее, прошу вас уточнить, как f: param выжил, даже если они отсутствовали в URL-адресе после появления ошибки проверки?   -  person Farhan Shirgill Ansari    schedule 20.03.2016
comment
Они отправляются через POST.   -  person BalusC    schedule 20.03.2016
comment
@BalusC: первоначальный запуск запроса GET на localhost:8080/Leonard /faces/ch2/, параметры были извлечены из URL. При нажатии кнопки команды и вводе ничего в обязательное поле, чтобы запустить проверку и предотвратить отправку формы, URL-адрес изменился на localhost:8080/Leonard/faces/ch2/index.xhtml. Не удалось опубликовать содержимое, так как были ошибки проверки. Итак, запрос был завершен, и на этапе рендеринга мне было показано сообщение. Таким образом, параметр f должен был сохраниться только для этого запроса POST. а не дальше   -  person Farhan Shirgill Ansari    schedule 20.03.2016
comment
Если вы хотите сохранить их через GET вместо POST, используйте <o:form> вместо <f:param>.   -  person BalusC    schedule 20.03.2016