JSP Technology-- Struts2 & JSPуправления сеансом между вкладками в
Доступ URL-- http://localhost:8080/session_acroos_tab/login.action
В пользователя welcome.jsp входит какое-то значение в 'первое текстовое поле' и нажимает на «Первая кнопка».
- При нажатии этой кнопки (первая кнопка), функция firstButtonClick
LoginAction.java
называется. - Теперь управление снова перейдет на
Welcome.jsp
. На этом значении jsp, введенном пользователем в поле «Первое текстовое поле», отображается - Пользователь должен ввести некоторое значение в поле «Второе текстовое поле» и нажимает кнопку «Вторая кнопка».
- При нажатии этой кнопки (вторая кнопка), вызывается функция secondButtonClick
LoginAction.java
, и управление снова должно перейти на страницуWelcome.jsp
.
Перед выполнением пятого шага, если пользователь откроет новую вкладку и выполнит шаги с 1-го по 3-й и снова вернется на вкладку-1 и выполнит оставшиеся шаги, чем все данные сеанса, запущенные. Я знаю, что все открытые новые вкладки должны делиться одним и тем же сеансом, но чем это решение. Я хочу работать обе вкладки самостоятельно.
welcome.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<head>
<title>Welcome</title>
<script type="text/javascript">
function clickSecondButton(form)
{
form.action="secondButtonClickForm2";
form.submit();
}
</script>
</head>
<s:form action="firstButtonClickForm2" method="post">
<s:if test="%{#session.HIDE_FIRST_BUTTON!=null}">
<ul>
<li>FIRST TEXT FIELD VALUE - <s:property value="%{#session.FIRST_TEXT_FIELD}"/></li>
</ul>
<s:textfield name="secondtextfield" key="label.secondtextfield" size="20"></s:textfield>
<s:submit key="label.secondButton" align="center" onclick="clickSecondButton(this.form)"></s:submit>
</s:if>
<s:else>
<s:textfield name="firsttextfield" key="label.fisttextfield" size="20"></s:textfield>
<s:submit key="label.firstButton" align="center"></s:submit>
</s:else>
</s:form>
LoginAction.java
package net.patel.struts2;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
public class LoginAction {
private String username;
private String password;
private String firsttextfield;
private String secondtextfield;
public String execute() {
Map session = (Map) ActionContext.getContext().getSession();
session.clear();
if (this.username==null)
return "success";
if (this.username.equals("admin")
&& this.password.equals("admin123")) {
return "success";
} else {
return "error";
}
}
public String firstButtonClick() {
System.out.println("{firstButtonClick} "+firsttextfield);
Map session = (Map) ActionContext.getContext().getSession();
session.put("HIDE_FIRST_BUTTON", "Y");
//session.put("FIRST_TEXT_FIELD", firsttextfield);
return "success";
}
public String secondButtonClick() {
Map session = (Map) ActionContext.getContext().getSession();
System.out.println("{secondButtonClick} firsttextfield-"+session.get("FIRST_TEXT_FIELD")+" II TF-"+secondtextfield);
return "success";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirsttextfield() {
return firsttextfield;
}
public void setFirsttextfield(String firsttextfield) {
this.firsttextfield = firsttextfield;
}
public String getSecondtextfield() {
return secondtextfield;
}
public void setSecondtextfield(String secondtextfield) {
this.secondtextfield = secondtextfield;
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources"></constant>
<package name="default" extends="struts-default" namespace="/">
<action name="login" class="net.viralpatel.struts2.LoginAction">
<result name="success">Welcome.jsp</result>
<result name="error">Login.jsp</result>
</action>
<action name="*Form2" class="net.viralpatel.struts2.LoginAction" method="{1}">
<result name="success">Welcome.jsp</result>
<result name="error">Login.jsp</result>
</action>
</package>
</struts>
ApplicationResources.properties
label.username= Username
label.password= Password
label.login= Login
label.fisttextfield=First Text Field
label.firstButton=First Button
label.secondtextfield=Second Text Field
label.secondButton=Second Button
Постарайтесь быть более ясным, я в отсутствие идей в этой проблеме, даже это звучит как классический: Я тратить часы, пытаясь играть с этим, но не получили нигде Ваша помощь очень ценится.
Вы можете использовать некоторый токен, чтобы * идентифицировать * вкладку. –
Перед тем, как приветствовать страницу, создайте некоторый токен и передайте его. Когда вторая вкладка открыта, токен будет отличаться от первой вкладки, и вы можете показывать значения в соответствии с токеном. –