Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 数据表按列顺序擦除值_Ajax_Jsf_Datatable_Primefaces - Fatal编程技术网

Ajax 数据表按列顺序擦除值

Ajax 数据表按列顺序擦除值,ajax,jsf,datatable,primefaces,Ajax,Jsf,Datatable,Primefaces,我有PrimeFacesdataTable,它由一个Ajax调用填充 当我单击列标题以对其值进行排序时,这些值将消失 <p:commandButton value="Pesquisar" actionListener="#{requestController.listRequests}" update="dataTable" /> 显然,value=“#{requestController.backing.requestsList}”没有返回与初始请求相同的值。如果它是一个请求范围

我有PrimeFacesdataTable,它由一个Ajax调用填充

当我单击列标题以对其值进行排序时,这些值将消失

<p:commandButton value="Pesquisar" actionListener="#{requestController.listRequests}" update="dataTable" />

显然,
value=“#{requestController.backing.requestsList}”
没有返回与初始请求相同的值。如果它是一个请求范围的bean和/或根据基于请求的变量在每个请求上填充
requestsList
,就会发生这种情况

那只是一个设计错误。将托管bean放在视图范围中,并确保您没有在getter方法中执行任何业务逻辑。嵌套类
支持
也是可疑的,或者它必须是一个糟糕的命名

另见:

更新简而言之,您的bean应该如下所示:

@ManagedBean
@ViewScoped
public class Orders {

    private String query; // +getter +setter
    private List<Order> results; // +getter (no setter required)

    @EJB
    private OrderService service;

    public void search() {
        results = service.search(query);
    }

    // Add/generate normal getters/setters (don't change them!)
}
<h:form>
    <p:inputText value="#{orders.query}" />
    <p:commandButton value="Search" action="#{orders.search}" update=":tableForm" />
</h:form>
<h:form id="tableForm">
    <p:dataTable value="#{orders.results}" var="order" ... rendered="#{not empty orders.results}">
        ...
    </p:dataTable>
    <h:outputText value="No results found" rendered="#{facesContext.postback and empty orders.results}" />
</h:form>
@ManagedBean
@视域
公共阶级秩序{
私有字符串查询;//+getter+setter
私有列表结果;//+getter(不需要setter)
@EJB
私人订购服务;
公开无效搜索(){
结果=service.search(查询);
}
//添加/生成普通的getter/setter(不要更改它们!)
}
你的观点应该是这样的:

@ManagedBean
@ViewScoped
public class Orders {

    private String query; // +getter +setter
    private List<Order> results; // +getter (no setter required)

    @EJB
    private OrderService service;

    public void search() {
        results = service.search(query);
    }

    // Add/generate normal getters/setters (don't change them!)
}
<h:form>
    <p:inputText value="#{orders.query}" />
    <p:commandButton value="Search" action="#{orders.search}" update=":tableForm" />
</h:form>
<h:form id="tableForm">
    <p:dataTable value="#{orders.results}" var="order" ... rendered="#{not empty orders.results}">
        ...
    </p:dataTable>
    <h:outputText value="No results found" rendered="#{facesContext.postback and empty orders.results}" />
</h:form>

...

当我单击要订购的列时,它会再次发出请求吗?在这种情况下,
requestsList
是基于用户通知的日期进行搜索的结果。我们在没有ajax的情况下完成了这项工作,并且正在工作。当然,它提出了一个新的请求。检查HTTP通信量和服务器日志。将bean中的更改为
@ViewScoped
,并且我的方法没有被调用,什么也没有发生。在本例中,Ajax只与
@RequestScoped
bean一起工作,如果没有看到支持bean的逻辑,很难判断。但基于您在前面的问题中提供的支持bean代码,如果这是另一个由那篇误导性的ICEfaces文章引起的思考错误,我不会感到惊讶。不,这不是为了这个目的。你刚才犯了一个设计错误。根据启动示例重写它。顺便说一句,你的
changeEventListener
很奇怪。这似乎完全是多余的。
<h:form>
    <p:inputText value="#{orders.query}" />
    <p:commandButton value="Search" action="#{orders.search}" update=":tableForm" />
</h:form>
<h:form id="tableForm">
    <p:dataTable value="#{orders.results}" var="order" ... rendered="#{not empty orders.results}">
        ...
    </p:dataTable>
    <h:outputText value="No results found" rendered="#{facesContext.postback and empty orders.results}" />
</h:form>