2014-03-23 4 views
1

У меня есть этот код в файле .xhtml:Expression Language (EL) не работает в Embedded Glassfish 4.0

<h:inputText id="userName" value="#{userEntity.userName}" 
      title="${bundle['signup.createuser.username']}" 
      maxlength="#{jsfConst.userNameMaxFieldSize}"> 
</h:inputText> 

Но maxlength свойство не устанавливается при развертывании war файла в Embedded Glassfish 4.0. Я устанавливаю тот же самый файл war на установку Glassfish 4.0, и он отлично работает.

Я используя эту Glassfish зависимость в моей POM:

<dependency> 
    <groupId>org.glassfish.main.extras</groupId> 
    <artifactId>glassfish-embedded-all</artifactId> 
    <version>4.0</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.jboss.arquillian.container</groupId> 
    <artifactId>arquillian-glassfish-embedded-3.1</artifactId> 
    <version>1.0.0.CR3</version> 
    <scope>test</scope> 
</dependency> 

И это jsfConst.java файл:

@ManagedBean 
@Singleton 
@ConcurrencyManagement(ConcurrencyManagementType.BEAN) 
public class JsfConst { 
    public int getEmailFieldSize() { 
     return Const.emailFieldSize; 
    } 

    public int getUserNameMaxFieldSize() { 
     return Const.userNameMaxFieldSize; 
    } 
} 

Мой вопрос, что мне не хватает с Embedded Glassfish, что делает его не в состоянии для включения EL?

UPDATE:

Это web.xml файл:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.xhtml</welcome-file> 
    </welcome-file-list> 
    <error-page> 
     <exception-type>com.sun.faces.context.FacesFileNotFoundException</exception-type> 
     <location>/pagenotfound.jsp</location> 
    </error-page> 
    <error-page> 
     <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
     <location>/sessionexpired.jsp</location> 
    </error-page> 
    <listener> 
     <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
    </listener> 
</web-app> 
+0

Этот класс имеет странное сочетание аннотаций. Во-первых, вы намеревались ли это быть управляемым компонентом EJB или управляемым компонентом JSF? (обратите внимание: оба не могут, хотя ваша текущая установка аннотации подразумевает это желание) – BalusC

+0

Привет @BalusC, управляемый bean-компонент JSF, почему? Я вижу, поэтому оба не должны использоваться вместе, я должен удалить '@ Singleton'. Во всяком случае, я пробовал все комбинации аннотаций, и никто из них не работает в Embedded Glassfish 4. Но это похоже на недостающую зависимость или что-то вызывает это, когда-то я думал, что это может быть «Mojarra-2.2.0», который он использует , –

+0

Вы должны использовать '@ManagedBean @ ApplicationScoped' как из пакета' javax.faces.bean'. В качестве альтернативы, если у вас есть '/ WEB-INF/beans.xml' (и, следовательно, ваш webapp включен CDI),' @Named @ ApplicationScoped' из пакетов 'javax.injext' и' javax.enterprise.context' , Никаких других аннотаций. – BalusC

ответ

0

В Arquillian, вам нужно объявить все классы, которые содержат файл WAR для развертывания и тестирования. Просто зарегистрируйте JsfConst в WAR, используя ShrinkWrap.create(WebArchive.class, "createUser.war").addClass(JsfConst.class)

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