Влияние непосредственного атрибута и небольшого расхождения в документации JSF - PullRequest
0 голосов
/ 24 мая 2018

Ниже приведено исключение из Официальной документации JSF - Непосредственный атрибут

Предположим, что у вас есть страница с кнопкой и полем для ввода количества книги вкорзина для покупок.Если для непосредственных атрибутов кнопки и поля установлено значение true, новое значение, введенное в поле, будет доступно для любой обработки, связанной с событием, которое генерируется при нажатии кнопки.Событие, связанное с кнопкой, а также события, проверка и преобразование, связанные с полем, обрабатываются при применении значений параметров запроса.

Если для непосредственного атрибута кнопки задано значение true, но для непосредственного атрибута поляустановлено в false, событие, связанное с кнопкой, обрабатывается без обновления локального значения поля до уровня модели.Причина в том, что любые события, преобразования и проверки, связанные с полем, происходят после применения значений параметров запроса.

Это говорит о том, что если атрибут immediate установлен в значение ИСТИНА для компонента ввода, такого как текстовое поле икомпонент команды, затем кнопку отправки, тогда значение текстового поля будет доступно для обработки, однако я думаю, что это не так, если атрибут immediate кнопки отправки равен true, то любые данные, введенные пользователем в форму, недоступны для обработки.поскольку обработка события кнопки отправки будет происходить на этапе «применения значений запроса» и приведет к отправке формы, это означает, что этап «обновить модель данных» не будет выполнен, и, следовательно, свойства управляемого компонента не будут обновлены с даннымивведено пользователем.

Я даже попробовал это с кодом, и мое понимание выглядит правдивым.Однако, поскольку отрывок взят из официальной документации Oracle, я хотел бы знать, что я что-то упускаю.

Ниже приведен пример кода:

reeting.xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>
    <title>Guess Number Facelets Application</title>
</h:head>
<h:body>
    <h:form>
        <h:graphicImage value="#{resource['images:OracleLogo.png']}"
            alt="Duke waving his hand" />
        <h2>
            Hi, my name is #{userNameBean.lName}, #{userNameBean.fName}. I am thinking of a number from
            #{userNumberBean.minimum} to #{userNumberBean.maximum}. Can you guess it?
        </h2>
        <p>
            User number: <h:inputText id="userNo" title="Enter a number from 0 to 10:" value="#{userNumberBean.userNumber}">
                <f:validateLongRange minimum="#{userNumberBean.minimum}" maximum="#{userNumberBean.maximum}" />
            </h:inputText><br></br>
            User fName: <h:inputText id="userFName" value="#{userNameBean.fName}"  immediate="true" required="true"/><br></br>
            User lName: <h:inputText id="userLName" value="#{userNameBean.lName}"  immediate="true"/><br></br>
            <h:commandButton id="submit" value="Submit" action="#{userNameBean.submitRequest}" immediate="true"/>
        </p>
        <h:message showSummary="true" showDetail="false"
            style="color: #d20005;
font-family: 'New Century Schoolbook', serif;
font-style: oblique;
text-decoration: overline"
            id="errors1" for="userNo" />
    </h:form>
</h:body>
</html>

response.xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
    <title>Guess Number Facelets Application</title>
</h:head>
<h:body>
    <h:form>
        <h:graphicImage value="#{resource['images:OracleLogo.png']}"
            alt="Duke waving his hand" />
        <h2>
            <h:outputText id="result" value="${'hip' lt 'hit'}" /><br></br>
            <h:outputText id="result2" value="#{userNumberBean.response}" /><br></br>
            <h:outputText id="result3" value="#{userNameBean.lName}" />, <h:outputText id="result4" value="#{userNameBean.fName}" />
        </h2>
        <h:commandButton id="back" value="Back" action="greeting" />
    </h:form>
</h:body>
</html>

UserNumberBean:

import java.io.Serializable;
import java.util.Random;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

@Named
@SessionScoped
public class UserNumberBean implements Serializable {
    private static final long serialVersionUID = 5443351151396868724L;
    Integer randomInt = null;
    Integer userNumber = null;
    String response = null;
    private int maximum = 10;
    private int minimum = 0;

    public UserNumberBean() {
        Random randomGR = new Random();
        randomInt = new Integer(randomGR.nextInt(maximum + 1));
        System.out.println("Duke's number: " + randomInt);
    }

    public void setUserNumber(Integer user_number) {
        userNumber = user_number;
    }

    public Integer getUserNumber() {
        return userNumber;
    }

    public String getResponse() {
        if ((userNumber == null) || (userNumber.compareTo(randomInt) != 0)) {
            return "Sorry, " + userNumber + " is incorrect.";
        } else {
            return "Yay! You got it!";
        }
    }

    public int getMaximum() {
        return (this.maximum);
    }

    public void setMaximum(int maximum) {
        this.maximum = maximum;
    }

    public int getMinimum() {
        return (this.minimum);
    }

    public void setMinimum(int minimum) {
        this.minimum = minimum;
    }
}

UserNameBean:

package com.db.nsw.izt;

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named
@RequestScoped
public class UserNameBean {
    private String fName = "";
    private String lName = "";

    public String getfName() {
        return fName;
    }
    public void setfName(String fName) {
        this.fName = fName;
    }
    public String getlName() {
        return lName;
    }
    public void setlName(String lName) {
        this.lName = lName;
    }

    public String submitRequest(){
        System.out.println("@@@ " + fName + " | " + lName);
        return "response";
    }
}


ОБНОВЛЕНИЕ 1:

Детали моего окружения: JEE6, JSF 2.0, Mojara, WL 12.1.2(glassfish.jsf_1.0.0.0_2-1-20.jar)

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