tipos que mvc modelo formulario ejemplo componentes bean jsf jsf-2 managed-bean

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: