在 test.jsp 我显示以下信息
节点名称
节点位置
当前状态
为了显示上述信息,调用了动作类 TestAction.java 的 showStatus 方法,该方法通过以下代码块检索状态。
TestDTO.getInstance("NODE1").getCurrentStatus()
执行 showStatus 方法后控制将转到 test.jsp。
测试动作.java
import java.util.ArrayList;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport
{
public TestAction()
{super();
try{}
catch (Exception e){e.printStackTrace();}
}
public String showStatus() throws Exception
{
ArrayList testList=new ArrayList();
Map session = (Map)ActionContext.getContext().getSession();
TestDTO tdto=new TestDTO();
tdto.setNodeName("NODE1");
tdto.setNodeLocation("location1");
tdto.setCurrentStatus(TestDTO.getInstance("NODE1").getCurrentStatus());
testList.add(tdto);
session.put("SHOWLIST",tdto);
return "input";
}
}
执行 showStatus 方法后控制将转到 test.jsp。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page import="com.opensymphony.xwork2.ActionContext"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>NODE STATUS</title>
</head><body><center><s:form><br>
<s:if test="%{#session.SHOWLIST}">
<table width="80%" border="1" bgcolor="#FFFFFF" bordercolor="grey" align="center">
<tr><th><font size="4">NODE NAME</font></th><th><font size="4">NODE LOCATION</font></th>
<th ><font size="4">Status</font></th></tr>
<s:iterator value="%{#session.SHOWLIST}" var="mylist">
<tr><td bgcolor="#E6FAFB" align="center"><s:property value="nodeName" /></td>
<td bgcolor="#E6FAFB" align="center"><s:property value="nodeLocation"/></td>
<td bgcolor="#E6FAFB" align="center"><s:property value="currentStatus" /></td></tr>
</s:iterator></table></s:if></s:form></center>
</body></html>
其他一些应用程序正在通过以下代码块更新状态
TestDTO.getInstance("NODE1").setCurrentStatus("RUNNING");
我的问题是我想在没有任何用户干预的情况下动态更新 gui 上节点的当前状态。一旦用户单击链接,我将调用 showStatus 方法,并且能够在 gui 上显示节点的状态,但之后如果它发生变化,那么要知道当前状态用户再次访问链接,我想避免这种情况。我想要类似 1. 的 gui 行为。用户访问链接并可以看到状态。2. 几秒钟后,如果它发生变化,则应自动更新当前状态。
TestDTO.java
import java.util.HashMap;
public class TestDTO
{
String nodeName;String nodeLocation;String currentStatus="STOPPED";
private static HashMap instance=new HashMap();
public String getNodeName() {
return nodeName;
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
public String getNodeLocation() {
return nodeLocation;
}
public void setNodeLocation(String nodeLocation) {
this.nodeLocation = nodeLocation;
}
public String getCurrentStatus() {
return currentStatus;
}
public void setCurrentStatus(String currentStatus) {
this.currentStatus = currentStatus;
}
public static synchronized TestDTO getInstance(String nodeName)
{
TestDTO a;
if(instance.containsKey(nodeName))
{
return (TestDTO) instance.get(nodeName);
}
else
{
a = new TestDTO();
if(nodeName!=null && nodeName.length()>0)
instance.put(nodeName,a);
return a;
}
}
}