Я ехал, что рекомендуется использовать компоненты CDI в качестве резервных компонентов вместо управляемых компонентов JSF.
Поэтому я решил создать небольшой пример, чтобы понять, как он работает, для @ RequestScopedBean :
вместо использования @ ManagedBean ("beanName") , я использую @ Named ("beanName")
- вместо javax.faces.bean.RequestScopped я использую javax.enterprise.context.RequestScoped;
Демонстрационная программа очень проста, у меня есть поле и кнопка отправки, когда пользователь вводит что-то и страница обновляется, введенное значение больше не отображается (оно продолжается, пока запрос длится верно?). Я думаю, что я все сделал хорошо, но я получаю исключение, которое говорит:
ВНИМАНИЕ: StandardWrapperValve [Faces
Servlet]: PWC1406: Servlet.service ()
для сервлета Faces сервлет метал
исключение
javax.el.PropertyNotFoundException:
/index.xhtml @ 19,47
value = "# {cdiBean.passedValue}": цель
Недоступен, идентификатор 'cdiBean'
разрешено в ноль
Вот так выглядит моя программа:
index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>RequestScope demo CDI(Component Dependency Injection)</title>
</h:head>
<h:body>
<h:form>
<h3>RequestScope demo CDI(Component Dependency Injection)</h3>
<h:inputText value="#{cdiBean.passedValue}"/>
<br/>
<h:commandButton value="submit" action="index"/>
</h:form>
</h:body>
</html>
DemoBB.java
package backingbeans;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("cdiBean")//The Named anotation indicates that this is a CDI bean
@RequestScoped//If we use CDI beans the @RequestScoped annotation must come from: javax.enterprise.context.RequestScoped;
public class DemoBB {
//This value will be saved on the session only until the server responds to the request
private String passedValue;
public String getPassedValue() {
return passedValue;
}
public void setPassedValue(String passedValue) {
this.passedValue = passedValue;
}
}
-Где моя ошибка?
-В чем преимущество такого подхода? Я до сих пор не понимаю этого.