JSF 2.0 Поле ввода, представленное Ajax, нельзя использовать для ввода значений? - PullRequest
1 голос
/ 23 августа 2010
<h:form>
    Do you have a driving license?
    <h:selectOneMenu value="#{requestScope.license}">
        <f:selectItem itemLabel="Select..." itemValue=""/>
        <f:selectItem itemLabel="Yes" itemValue="Y"/>
        <f:selectItem itemLabel="No" itemValue="N"/>
        <f:ajax render="@form"/>
    </h:selectOneMenu>
    <br/>
    Enter driving license number:
    <h:inputText value="#{requestScope.number}"
      rendered="#{'Y' eq requestScope.license ? true : false}"/>
    <br/>
    <h:commandButton value="Submit"/>
    <br/>
    Your driving license number is: #{requestScope.number}
</h:form>

Проблема в реализации ОЧЕНЬ ОБЩЕГО сценария с JSF 2.0

Приведенная выше разметка JSF 2.0 изображает очень распространенный сценарий.

Если пользователь выбирает «Да» для вопроса «Есть ли у вас водительские права?», То поле «Введите ваш номер водительского удостоверения:» будет отображено Ajax.

Если пользователь вводит номер водительского удостоверения и нажимает кнопку, входные данные должны отображаться внизу (насколько я понимаю), но этого не происходит.

Пожалуйста, кто-нибудь объяснит это.

1 Ответ

4 голосов
/ 23 августа 2010

Вам необходимо привязать свойства к полноценному управляемому бину и отобразить число в h:outputText, чтобы его можно было повторно обработать.

Вот улучшение.

<h:form>
    <h:outputLabel for="license" value="Do you have a driving license?" />
    <h:selectOneMenu id="license" value="#{bean.license}" required="true">
        <f:selectItem itemLabel="Select..." itemValue="" />
        <f:selectItem itemLabel="Yes" itemValue="Y" />
        <f:selectItem itemLabel="No" itemValue="N" />
        <f:ajax render="@form"/>
    </h:selectOneMenu>
    <br/>
    <h:panelGroup id="input" rendered="#{bean.license eq 'Y'}">
        <h:outputLabel for="number" value="Enter driving license number:" />
        <h:inputText id="number" value="#{bean.number}" required="true" />
        <br/>
    </h:panelGroup>
    <h:commandButton value="Submit" action="#{bean.submit}">
        <f:ajax execute="@form" render="@form" />
    </h:commandButton>
    <br/>
    <h:outputText value="Your driving license number is: #{bean.number}" 
        rendered="#{bean.license eq 'Y' and not empty bean.number}" />
    <br/>
    <h:messages />
</h:form>

Сбоб, как это:

@ManagedBean
@ViewScoped
public class Bean {

    private String license;
    private Integer number;

    public void submit() {
        System.out.println("Has license? " + license);
        System.out.println("Submitted number: " + number);
    }

    // Add/generate getters and setters.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...