2013-12-24 6 views
0

Итак, я новичок в этом JSF-материале и думал, что напишу код, чтобы увидеть, как он работает. На самом деле я делал вещи like here in this tutorial. Но я даже не могу сделать простейшую вещь.outputText ничего не отображает/не может получить доступ к классу?

Чтобы все ясно, я просто сделал один класс:

@ManagedBean 
@SessionScoped 
public class Bean implements Serializable { 

    private static final long serialVersionUID = 1L; 

    public final String TEXT = "Bean"; 
} 

мой index.xhtml:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:p="http://xmlns.jcp.org/jsf/passthrough"> 
<head> 
<meta charset="UTF-8"/> 
<title>JEE</title> 
</head> 
<body> 
    <h3>Output1: <h:outputText value="#{Bean.TEXT}"/></h3> 
    <h4>Output2: #{Bean.TEXT}</h4> 
</body> 
</html> 

Если я начинаю это на Eclipse, я не получаю никакого вывода для Bean.TEXT, как если бы я не будет иметь никакого доступа к этому классу:

enter image description here

Поэтому после Output1 и Output2 должен быть текст. Я не вижу никаких исключений в отношении класса Bean. Как мне отлаживать такие вещи? Какие-либо предложения?

PS:

Вот мой web.xml (я сделал это как-то, как в учебнике):

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>JavaEE</display-name> 
    <welcome-file-list> 
    <welcome-file>index.xhtml</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <servlet-name>Servlet Class</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Servlet Class</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Servlet Class</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Servlet Class</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
</web-app> 

Консоль вывода:

Dec 24, 2013 3:36:18 PM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 
Dec 24, 2013 3:36:18 PM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:JavaEE' did not find a matching property. 
Dec 24, 2013 3:36:18 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["http-bio-8080"] 
Dec 24, 2013 3:36:18 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["ajp-bio-8009"] 
Dec 24, 2013 3:36:18 PM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 573 ms 
Dec 24, 2013 3:36:18 PM org.apache.catalina.core.StandardService startInternal 
INFO: Starting service Catalina 
Dec 24, 2013 3:36:18 PM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47 
Dec 24, 2013 3:36:20 PM com.sun.faces.config.ConfigureListener contextInitialized 
INFO: Initializing Mojarra 2.2.4 (20131003-1354 https://svn.java.net/svn/mojarra~svn/tags/[email protected]) for context '/JavaEE' 
Dec 24, 2013 3:36:20 PM com.sun.faces.spi.InjectionProviderFactory createInstance 
INFO: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans methods marked with these annotations will have said annotations processed. 
Dec 24, 2013 3:36:21 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-bio-8080"] 
Dec 24, 2013 3:36:21 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-bio-8009"] 
Dec 24, 2013 3:36:21 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 2284 ms 

ответ

2

В Е.Л. контексте доступ фасоль с помощью имена, которые ранее были объявлены с помощью аннотаций или файла конфигурации. Если вы не укажете name элемент аннотации @ManagedBean, тогда это станет простым именем класса с первой декапитализацией первой буквы (если две начальные буквы не являются прописными). В вашем случае к bean-файлу можно обращаться как #{bean}, когда вы пытались получить к нему доступ как #{Bean}, что не так (но могло бы сработать, если вы объявили его @ManagedBean(name="Bean")).

Кроме того, стоит отметить, что обычная практика имеет только одно сопоставление для сервлетов граней, а это *.xhtml, поэтому вам было бы лучше, если бы вы удалили три указанных сопоставления сервлетов из вашего web.xml и осталось только одно.

+0

Thx для информации. Теперь я попробовал # {bean.TEXT} вместо Bean.TEXT -> но все тот же результат. Я также пытался написать @ManagedBean (name = «Bean»), но eclipse дает мне ошибку «Имя атрибута не определено для типа аннотации ManagedBean». – silla

+0

Редактировать: Теперь у меня возникла проблема, я использовал «import javax.annotation.ManagedBean;» вместо "import javax.faces.bean.ManagedBean;". Теперь я могу использовать (name = "BeanName"), а также мой вывод работает. – silla

Смежные вопросы