Ниже приведено исключение из Официальной документации 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)