Java 来自ManagedBean的数据不';不要在视图中刷新

Java 来自ManagedBean的数据不';不要在视图中刷新,java,jsf,primefaces,Java,Jsf,Primefaces,我试图用产品列表更新数据表,但当我调用getCatalogProducts操作时,它不会刷新视图。数据不会显示在视图中 这是我的JSF的ManagedBean: @ManagedBean(name = "catalog") @ViewScoped public class CatalogMgtBean { private String value = "This is the value"; private List<Port> products; priv

我试图用产品列表更新数据表,但当我调用getCatalogProducts操作时,它不会刷新视图。数据不会显示在视图中

这是我的JSF的ManagedBean:

@ManagedBean(name = "catalog")
@ViewScoped
public class CatalogMgtBean {

    private String value = "This is the value";
    private List<Port> products;
    private CatalogService catalogService;

    public void loadCatalogProducts() {

        catalogService = new CatalogServiceImpl();

        products = catalogService.getProducts();

        this.value = "This is another value";
    }

    public List<Port> getProducts() {
        return products;
    }

    public void setProducts(List<Port> products) {
        this.products = products;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
@ManagedBean(name=“catalog”)
@视域
公共类目录bean{
private String value=“这是值”;
私人上市产品;
私人编目服务;
公共产品目录(){
catalogService=新CatalogServiceImpl();
products=catalogService.getProducts();
this.value=“这是另一个值”;
}
公共列表产品(){
退货产品;
}
公共产品(列出产品){
这一点。产品=产品;
}
公共字符串getValue(){
返回值;
}
公共void设置值(字符串值){
这个值=值;
}
}
这是我的观点:

<?xml version="1.0" encoding="UTF-8"?>
<!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:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<h:head>
</h:head>
<h:body>
    <h:form id="catalogForm">
        <p:dataTable id="productsDT" paginator="true" paginatorPosition="bottom"
            rows="10" value="#{products}" var="products">
            <p:column headerText="ID">
                <h:outputText value="#{products.id}" />
            </p:column>
            <p:column headerText="ID">
                <h:outputText value="#{products.nombre}" />
            </p:column>
            <p:column headerText="ID">
                <h:outputText value="#{products.nacional}" />
            </p:column>
            <p:column headerText="FECHA">
                <h:outputText value="#{products.fecha}">
                    <f:convertDateTime pattern="dd/MM/yyyy" />
                </h:outputText>
            </p:column>
            <p:column headerText="ESTADO">
                <h:outputText value="#{products.estado}" />
            </p:column>
        </p:dataTable>
        <p:commandButton id="gettingProducts" value="Getting the products..."
        action="#{catalog.loadCatalogProducts()}" update="productsDT" />
    </h:form>
</h:body>
</html>

当我按下gettingProducts命令按钮时,它会成功调用getCatalogProducts操作,但不会用数据刷新视图

怎么了

我正在补充信息。这是我的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" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">

  <display-name>JSAC</display-name>

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

<!-- Welcome page -->
<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

<!-- Servlets -->
<!-- JavaServer Faces -->
<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>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>JSAC</groupId>
    <artifactId>JSAC</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>JSAC</name>

    <properties>

        <!-- Generic properties -->
        <java.version>1.6</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Web -->
        <jsp.version>2.2</jsp.version>
        <jstl.version>1.2</jstl.version>
        <servlet.version>2.5</servlet.version>

    </properties>

    <repositories>
        <repository>
            <id>prime-repo</id>
            <name>Prime Repo</name>
            <url>http://repository.primefaces.org</url>
        </repository>
    </repositories>

    <dependencies>

        <!-- Primefaces -->
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>3.3</version>
        </dependency>

        <!-- JSF -->
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.1.11</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.1.11</version>
        </dependency>

        <!-- Postgres DB -->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.0-801.jdbc4</version>
        </dependency>

        <!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>${servlet.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>${jsp.version}</version>
        </dependency>

        <!-- Javamelody -->
        <dependency>
            <groupId>net.bull.javamelody</groupId>
            <artifactId>javamelody-core</artifactId>
            <version>1.46.0</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

JSAC
javax.faces.PROJECT_阶段
发展
index.xhtml
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
*.xhtml

和我的pom.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" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">

  <display-name>JSAC</display-name>

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

<!-- Welcome page -->
<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

<!-- Servlets -->
<!-- JavaServer Faces -->
<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>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>JSAC</groupId>
    <artifactId>JSAC</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>JSAC</name>

    <properties>

        <!-- Generic properties -->
        <java.version>1.6</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Web -->
        <jsp.version>2.2</jsp.version>
        <jstl.version>1.2</jstl.version>
        <servlet.version>2.5</servlet.version>

    </properties>

    <repositories>
        <repository>
            <id>prime-repo</id>
            <name>Prime Repo</name>
            <url>http://repository.primefaces.org</url>
        </repository>
    </repositories>

    <dependencies>

        <!-- Primefaces -->
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>3.3</version>
        </dependency>

        <!-- JSF -->
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.1.11</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.1.11</version>
        </dependency>

        <!-- Postgres DB -->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.0-801.jdbc4</version>
        </dependency>

        <!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>${servlet.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>${jsp.version}</version>
        </dependency>

        <!-- Javamelody -->
        <dependency>
            <groupId>net.bull.javamelody</groupId>
            <artifactId>javamelody-core</artifactId>
            <version>1.46.0</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

4.0.0
JSAC
JSAC
0.0.1-快照
战争
JSAC
1.6
UTF-8
UTF-8
2.2
1.2
2.5
优质回购
优质回购
http://repository.primefaces.org
org.primefaces
素面
3.3
com.sun.faces
JSFAPI
2.1.11
com.sun.faces
jsf impl
2.1.11
postgresql
postgresql
9.0-801.jdbc4
javax.servlet
jstl
${jstl.version}
javax.servlet
servlet api
${servlet.version}
javax.servlet.jsp
jsp api
${jsp.version}
net.bull.javamelody
javamelody核心
1.46.0
org.apache.maven.plugins
maven编译器插件
2.3.2
${java.version}
${java.version}
以及faces-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1_24.xsd" version="2.1">

    <application>
        <resource-bundle>
            <base-name>i18n.messages</base-name>
            <var>msg</var>
        </resource-bundle>
    </application>
</faces-config>

i18n.信息
味精
使用update=“@form”。如果它有效,则使用开发人员工具查找datable的id并用该id替换@form。

使用update=“@form”。如果它有效,则使用开发人员工具查找datable的id并用该id替换@form。

除此之外,
应指定要更新的组件,您使用的是非
null
/
void
结果。换句话说,您正在创建一个新的视图。换句话说,旧视图和所有与之相关的视图范围的bean都将被销毁。新视图将创建一个新的视图范围bean。由于视图范围的bean由视图标识,因此新视图不再引用加载新列表的同一视图范围的bean

只需将action方法
设为void
(为了清晰起见,我还将其重命名,因为这绝对不是getter)

这样,相同的视图将被重用,与之关联的现有视图范围bean将保持活动状态

第二个问题是没有将
绑定到任何bean属性。您需要将它绑定到
{catalog.products}
,而不是绑定到不作为托管bean存在的
{products}

另见:
除了
应该指定您要更新的组件之外,您正在使用非
null
/
void
结果进行导航。换句话说,您正在创建一个新的视图。换句话说,旧视图和所有与之相关的视图范围的bean都将被销毁。新视图将创建一个新的视图范围bean。由于视图范围的bean由视图标识,因此新视图不再引用加载新列表的同一视图范围的bean

只需将action方法
设为void
(为了清晰起见,我还将其重命名,因为这绝对不是getter)

这样,相同的视图将被重用,与之关联的现有视图范围bean将保持活动状态

第二个问题是没有将
绑定到任何bean属性。您需要将它绑定到
{catalog.products}
,而不是绑定到不作为托管bean存在的
{products}

另见:

操作完成后,您不会告诉PrimeFaces命令按钮更新表格。为什么您希望它会自动发生?@BalusC我将update属性与dataTable的id一起放在CommandButton上,但它不会刷新dataTable。o,您的bean是视图范围的?是的@BalusC,我的bean是视图范围的。我添加了@ViewScope注释,并且我的数据表没有刷新否,但是您使用非
null
/
void
导航,这会导致从scrat重新创建视图范围的bean