利用Ajax特性,使在界面的时间每秒刷一次

   利用Ajax的部分提交特性,使得界面上的时间能每秒刷一次。整个页面是不会刷新的,只是部分刷新。

 

    前台调用很简单:

 

         <ice:form id="serviceTime">
                        <tr align="right">
                            <ice:outputText id="service" value="#{SystemService.serverTime}"/>
                        </tr>
           </ice:form>

 

    对应的java类就不需要写什么。

 

    另写一个java 类

 

 import java.util.Calendar;
import java.text.DateFormat;
import java.util.TimeZone;
import java.text.SimpleDateFormat;
import com.icesoft.faces.async.render.IntervalRenderer;
import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
/**
 *
 * @author chenshu
 */
public class SystemService implements Renderable{
    private DateFormat serverFormat;
    private PersistentFacesState state;
    private final int renderInterval = 1000;
    private IntervalRenderer clock;
    private TimeZone serverTimeZone;

    public SystemService()
    {
        init();
    }

    private void init() {
        serverTimeZone = TimeZone.getDefault();
        serverFormat = buildDateFormatForTimeZone(serverTimeZone);
        state = PersistentFacesState.getInstance();
    }

    public static DateFormat buildDateFormatForTimeZone(TimeZone timeZone) {
        SimpleDateFormat currentFormat = new SimpleDateFormat("EEE, HH:mm:ss");
        Calendar currentZoneCal = Calendar.getInstance(timeZone);
        currentFormat.setCalendar(currentZoneCal);
        currentFormat.setTimeZone(timeZone);
        return currentFormat;
    }


    public PersistentFacesState getState() {
        return state;
    }

    public void setRenderManager(RenderManager renderManager) {
        clock = renderManager.getIntervalRenderer("clock");
        clock.setInterval(renderInterval);
        clock.add(this);
        clock.requestRender();
    }

    public void renderingException(RenderingException renderingException) {
        /*
        if (log.isDebugEnabled()) {
            log.debug("Rendering exception:  " + renderingException);
        }*/

        if (renderingException instanceof FatalRenderingException) {
            performCleanup();
        }
    }

    public void dispose() throws Exception {
        /*
        if (log.isInfoEnabled()) {
            log.info("Dispose TimeZoneBean for a user - cleaning up");
        }*/
        performCleanup();
    }

    protected boolean performCleanup() {
        try {
            if (clock != null) {
                clock.remove(this);
                if (clock.isEmpty()) {
                    clock.dispose();
                }
                clock = null;
            }
            return true;
        } catch (Exception failedCleanup) {
          /*
            if (log.isErrorEnabled()) {
                log.error("Failed to cleanup a clock bean", failedCleanup);
            }
           */
        }
        return false;
    }


    public String getServerTime() {
        return formatCurrentTime(serverFormat);
    }

    public static String formatCurrentTime(DateFormat dateFormat) {
        Calendar cal = dateFormat.getCalendar();
        cal.setTimeInMillis(System.currentTimeMillis());
        return dateFormat.format(cal.getTime());
    }
}

 

 在配置文件中要做修改

         <managed-bean>
        <managed-bean-name>SystemService</managed-bean-name>
        <managed-bean-class>OA.System.SystemService</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>renderManager</property-name>
            <value>#{renderManager}</value>
        </managed-property>
       </managed-bean>

 

   在jsf 中,如果把后台(facesContext)比做一颗树,那么前台jsp页面tag 就对应于树的一个结点。如果页面有10个tag(tag中的内容都是保存在facesContext中的),那么facesContext树就会有11个结点(根结点是jsp:root)。

   当页面重新喧染的时候,原来的facesContetx 与新的facesContext 会进行比较,不同的部分就会被改变,而相同的部分是不会改变。(页面部分)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值