Jsf 数据列表在编辑后不刷新

Jsf 数据列表在编辑后不刷新,jsf,master-detail,ajax-update,Jsf,Master Detail,Ajax Update,我想在编辑元素后刷新数据列表。我使用@Postconstruct来初始化数据,但没有成功 以下代码显示数据列表: <h:form> <p:dataTable widgetVar="developpeur" value="#{manageUrlSiteTestBean.sitewebs}" var="dev" style="margin-bottom:20px"> <f:facet name="header"> Les tests de la web

我想在编辑元素后刷新数据列表。我使用@Postconstruct来初始化数据,但没有成功

以下代码显示数据列表:

<h:form>

  <p:dataTable widgetVar="developpeur" value="#{manageUrlSiteTestBean.sitewebs}" var="dev"   style="margin-bottom:20px">
 <f:facet name="header">
Les tests de la website url </f:facet>

   <p:column headerText="titre">
 #{dev.title}
 </p:column>


 <p:column>
 <p:commandButton value="edit"  update=":form">
  <f:setPropertyActionListener target="#{manageUrlSiteTestBean.siteweb}" value="#{dev}"></f:setPropertyActionListener>
   <f:setPropertyActionListener target="#{manageUrlSiteTestBean.form}" value="true"></f:setPropertyActionListener>
 </p:commandButton>
 </p:column>
 </p:dataTable>
 </h:form>

Les tests de la网站url
#{dev.title}
代码的第二部分是一个表单,用于检索选择用于编辑的数据

<h:panelGrid id="form">

 <h:form rendered="#{manageUrlSiteTestBean.form}" >
 <p:panel header="Modification">
 <h:panelGrid columns="1">

 <p:outputLabel value="Name" id="lcin"/>
 <p:inputText id="cink" value="#{manageUrlSiteTestBean.siteweb.title}" required="true" >
 </p:inputText>

  </h:panelGrid>
 <p:commandButton value="Validate" action="#{manageUrlSiteTestBean.validate()}" />
  </p:panel>
  </h:form>
 </h:panelGrid> 

下面的代码是支持bean

@ManagedBean
@ViewScoped
public class ManageUrlSiteTestBean implements Serializable{

    public ManageUrlSiteTestBean(){

    }
    private static final long serialVersionUID = 1L;
    @EJB
    ManageUrlSiteTestLocal local;
    private SiteWebImpose siteweb = new SiteWebImpose() ;
    private List<SiteWeb> sitewebs=new ArrayList<SiteWeb>();
    private boolean form;
    public ManageUrlSiteTestLocal getLocal() {
        return local;
    }
    public void setLocal(ManageUrlSiteTestLocal local) {
        this.local = local;
    }
    public List<SiteWeb> getSitewebs() {
        return sitewebs;
    }
    public void setSitewebs(List<SiteWeb> siteweb) {
        this.sitewebs = siteweb;
    }
    public SiteWebImpose getSiteweb() {
        return siteweb;
    }
    public void setSiteweb(SiteWebImpose siteweb) {
        this.siteweb = siteweb;
    }   
    public boolean isForm() {
        System.out.println("nn");
        return form;
    }
    public String validate(){
        local.updateUrlSite(siteweb);
        form=false;
        siteweb=new SiteWebImpose() ;
        init();
        return null;        
    }
    public void setForm(boolean form) {
        this.form = form;
    }   
    @PostConstruct
    public void init(){
        setSitewebs(local.listerUrlSiteTests());
    }
}
@ManagedBean
@视域
公共类ManagerUrlSiteTestBean实现可序列化{
公共管理器URLSitestBean(){
}
私有静态最终长serialVersionUID=1L;
@EJB
ManagerUrlSiteTestLocal;
private SiteWebPressure siteweb=新建SiteWebPressure();
private List sitewebs=new ArrayList();
私有布尔形式;
公共管理器UrlSiteTestLocal getLocal(){
返回本地;
}
public void setLocal(ManageUrlSiteTestLocal){
this.local=本地;
}
公共列表getSitewebs(){
返回网站;
}
公共网站(列表网站){
this.sitewebs=siteweb;
}
公共站点Web应用getSiteweb(){
返回网站;
}
公共无效设置网站(站点网站){
this.siteweb=siteweb;
}   
公共布尔isForm(){
系统输出打印项次(“nn”);
申报表;
}
公共字符串验证(){
local.updateUrlSite(siteweb);
形式=假;
siteweb=新的SiteWebPressure();
init();
返回null;
}
公共void集合形式(布尔形式){
this.form=形式;
}   
@施工后
公共void init(){
setSitewebs(local.listrurSiteTests());
}
}

我如何才能做到这一点?

当您触发按钮的验证操作时,实际上不会更新列表。因此,列表将被更新,好的,但是您也需要在html中对其进行ajax更新。试试这样的东西

<p:commandButton value="Validate" action="#{manageUrlSiteTestBean.validate()}" update=":form:developpeur"/>

我不记得您是否还需要为datatable声明一个id,或者它将只与
widgetVar
一起工作,但我认为您也需要一个id,所以也将
id=“developpeur”
放在datatable上。 并在第一张表单中添加
id=“form”

看看这里关于ajax提交和非ajax提交的示例


让validate返回一个空字符串。我该怎么办?如果您可以打印列表并看到它正在更新,请更改
公共字符串validate(){local.updateUrlSite(siteweb);form=false;siteweb=new SiteWebImposure();init();return null;}
公共字符串验证(){local.updateUrlSite(siteweb);form=false;siteweb=new sitewebpressure();init();return”“;}
仍然存在相同的问题您可以在托管bean中
System.out.println
看到列表正在更新吗?感谢您的帮助,我向该命令按钮添加了update=“@all”