jsf - que - El frijol administrado no está construido
modelo jsf (2)
En primer lugar, (eager = true) solo funciona con @ApplicationScoped
gestionados @ApplicationScoped
y significa que bean se creará cuando la aplicación se inicialice, por lo que en este caso debe eliminarlo.
Le sugiero que compruebe que el atributo producten tiene un método getter, porque no lo especifica en su código. También puedes probar con otro alcance como @ViewScoped
.
Mi bean administrado JSF no está construido cuando llegué a la página.
Este es mi facelet:
<h:dataTable value="#{productsBean.producten}" var="product">
<h:column>#{product.description}</h:column>
<h:column>#{product.price}</h:column>
<h:column>#{product.categoryName}</h:column>
<h:column>
<h:link value="Edit" outcome="/products/edit">
<f:param name="id" value="#{product.product_id}"/>
</h:link>
</h:column>
</h:dataTable>
Esta es mi ProductsBean:
@ManagedBean(eager=true)
@RequestScoped
public class ProductsBean implements Serializable{
private List<ProductBean> producten; //+getter
@ManagedProperty(value = "#{applicationBean}")
private ApplicationBean applicationBean;
public ProductsBean() {
Store store = applicationBean.getStore();
for (String c : store.getCategories()) {
for(be.kdg.shop.model.stock.Product p : store.getProductsOfCategory(c)){
ProductBean product = new ProductBean();
product.setProduct_id(p.getProduct_id());
product.setDescription(p.getDescription());
product.setCategoryName(p.getCategoryName());
product.setPrice(p.getPrice());
producten.add(product);
}
}
....
Cuando uso "# {productsBean.producten}" mi JavaBean debe ser inicializado pero no lo es. Cuando depuro mi código, no alcanzo el constructor.
Veo el código fuente JSF sin procesar.
Su solicitud HTTP no llegó al FacesServlet
en absoluto. Es el responsable de realizar todos los trabajos de JSF, como crear beans administrados y generar HTML.
Debe asegurarse de que su URL de solicitud HTTP coincida con el <url-pattern>
del FacesServlet
tal como está configurado en web.xml
de web.xml
. Si es por ejemplo *.jsf
, entonces debe abrir la página por /products.jsf
lugar de /products.xhtml
.
Alternativamente, también puede simplemente cambiar el <url-pattern>
de FacesServlet
a *.xhtml
, para que nunca tenga que jugar con las URL virtuales. Anteriormente en JSF 1.x esto solía terminar en un ciclo infinito que se llamaba a sí mismo cada vez, pero desde JSF 2.x esto ya no ocurre y debería funcionar bien.
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Ver también:
- Nuestra página wiki JSF - contiene un Hello World y varios enlaces a tutoriales sanos
- Facelets JSF: A veces veo que la URL es .jsf y, a veces, .xhtml. ¿Por qué?