2012-02-16 74 views
0

我有豐富:dataTable中含有豐富:inplaceInput組件和幾列豐富:inplaceInput編輯文本,刷新組件

<h:column> 
    <f:facet name="header">Next Fire</f:facet> 
    <h:outputText value="#{_quartzJobDetails.qrtzTriggerses.nextFireTime}" > 
    <s:convertDateTime type="both" dateStyle="short"/> 
    </h:outputText> 
</h:column> 

<h:column> 
     <f:facet name="header">Cron Expression</f:facet> 
     <rich:inplaceInput layout="block" value="#{_quartzJobDetails.qrtzTriggerses.qrtzCronTriggers.cronExpression}" 
       id="inplaceInput" 
       selectOnEdit="true" 
       editEvent="ondblclick"> 
       <a:support event="onviewactivated" reRender="quartzJb" bypassUpdates="false" 
         action="#{quartzAction.rescheduleJob(_quartzJobDetails.qrtzTriggerses)}"/> 
     </rich:inplaceInput> 
</h:column> 

操作方法:

public void rescheduleJob(QrtzTriggers qrtztrigger){ 
     CronTrigger trigger; 
     try { 
      trigger = // boring trigger creation omitted 
      this.controller.getScheduler().rescheduleJob(); //boring reschedule omitted 
      this.entityManager.merge(qrtztrigger); //this didn't help any 
     } catch (ParseException e) { 
      log.error("cron expression incorrect " + e); 
     } catch (SchedulerException e) { 
      log.error("scheduler no likey " + e); 
     } 
} 

當用戶編輯inplace使用新的cronExpression輸入「Next Fire」列應更新爲新的時間點擊。這發生在數據庫中,但除非我物理刷新頁面,否則UI不會更新。我以前遇到過這個問題,而我最好的解決方案是使用JavaScript爲我刷新頁面 - 但這不是必須的。那麼如何在不刷新瀏覽器頁面的情況下更新數據?
縫2.2 RichFaces的3.3.1,JSF 1.2,JBoss的5.1

回答

0

quartzJb要重新描繪表的ID?如果沒有,只需將您要reRender的表的ID添加到您的支持標記:

<a:support event="onviewactivated" reRender="quartzJb,jobTableId" ... 
+0

Thanx mbockus,但是,是的,quartzJb是表ID。 – gebuh 2012-02-18 03:19:27

+0

實際上是否在您的操作方法中更新了nextFireTime?我會嘗試在getNextFireTime()方法上設置一個斷點,以查看它是否在數據表重新渲染時被調用。這可能會給你一些線索,說明它爲什麼沒有返回正確的價值。 – 2012-02-18 03:48:30