为了调用 Translator 对象的一个实例,调用程序必须调用静态方法 getInstance(HttpServletRequest)。getInstance() 方法将确定是否应返回 Translator 的一个新实例,或者是否应从 HttpSession 中重用某个实例。该方法通过查看定制参数 action 来实现这一点。此参数是随 HTTP 请求(例如,http://localhost/registerLoan.jsp?action=new)一起传递的。下面的样例代码段显示了 getInstance() 的内容:
public static LoanRegistrationTranslator getInstance(HttpServletRequest request)
{
// 声明返回值变量。
LoanRegistrationTranslator lrtRV = null;
// HttpSession 是必需的,因此在此处将它提取出来。
HttpSession session = request.getSession();
// 从 request 对象中检索 action 参数。
String sAction = parseString(request, ACTION);
// 确定我们要返回哪种 Translator。
if (ACTION_PROCESS.equals(sAction) == true)
{
// 因为 action 参数被设置为 process,这表示我们正在处理一个现有的
// Translator,所以从 HttpSession 中将这个 translator 提取出来。
lrtRV = (LoanRegistrationTranslator)
session.getValue(HttpSessionValueKeys.LOAN_REGISTRATION_TRANSLATOR);
}
else if (sAction == null || "".equals(sAction) == true ||
ACTION_NEW.equals(sAction) == true)
{
// 由于未设置或根本未传递 action,所以缺省操作是创建一个新的 translator。
// 另一种可能是 action 为 "new"
lrtRV = new LoanRegistrationTranslator();
session.putValue(HttpSessionValueKeys.LOAN_REGISTRATION_TRANSLATOR, lrtRV);
}
else
{
// 由于 action 不满足前面的任何检查,即 action 值是位于辅助存储器中的
// 一个现有 Loan 的 ID,所以这次创建一个 LoanRegistrationTranslator,
// 其值被预设为已保存的 loan 中的值。
lrtRV = new LoanRegistrationTranslator(sAction);
session.putValue(HttpSessionValueKeys.LOAN_REGISTRATION_TRANSLATOR, lrtRV);
}
// 返回 Translator 对象的一个实例。
return lrtRV;
}