複数の Struts アクションで使用される「テンプレート」JSP ファイルがいくつかあります。呼び出される特定のアクションに基づいて設定したい別の JSP ファイルがあります。例えば:
<% if(this is one.action) { int testVar = 1; } %>
<% if(this is two.action) { int testVar = 2; } %>
これを行う方法はありますか?
1つの解決策は、両方のアクションファイルに共通のメソッドを実装することです。
public Integer getPageID() {
return pageID;
}
次に、JSPで:
<s:if test="%{pageID == 0}">
<s:set name="testVar" value="1"/>
</s:if>
<s:elseif test="%{pageID == 1}">
<s:set name="testVar" value="2"/>
</s:elseif>
変数を1つだけ設定する場合は、アクションクラスから直接変数を使用することを検討する必要があります。
Struts 2 によるソリューション
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class MyLoggingInterceptor implements Interceptor {
private static final long serialVersionUID = 1L;
public String intercept(ActionInvocation invocation) throws Exception {
String className = invocation.getAction().getClass().getName();
System.out.println("Before calling action: " + className);
int pageNo = 0 ;
if(className.equals("Login")) {
pageNo = 1;
} else if(className.equals("Login")) {
pageNo = 2;
} // so on for other pages
String result = invocation.invoke();
final ActionContext context = invocation.getInvocationContext ();
HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
request.setAttribute("pageNo", pageNo);
return result;
}
public void destroy() {
System.out.println("Destroying ...");
}
public void init() {
System.out.println("Initializing ...");
}
}
必要なjspページで、次を使用してリクエスト変数を取得します
request.getAttribute("pageNo");
Struts 1 を使用したソリューション
Interceptor の代わりに RequestProcessor を使用して、pageNo 変数をリクエスト スコープに配置します。
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
public class CustomRequestProcessor extends RequestProcessor {
public boolean processPreprocess(HttpServletRequest request, HttpServletResponse response) {
System.out .println("Called the preprocess method before processing the request");
String path = processPath(request, response);
if (path == null) {
return;
}
int pageNo = 0 ;
if(path.equals("Login")) {
pageNo = 1;
} else if(path.equals("Login")) {
pageNo = 2;
} // so on for other pages
request.setAttribute("pageNo", pageNo);
return super.processPreprocess(request,response);
}
}