最初の jspに<s:form>
タグがあり、struts アクションを介してフォームを送信し、別の jsp を表示すると、フォーム タグが 2 番目の jsp にも拡張されているようです。(firebugで観察されたように)。これらの jsps に同じ ID を持つ要素がいくつかあり、このようにそれらを一緒にクラブすると、多くの問題が発生します。また、<head>
2 番目の jsp のセクションは無視されます。
これは page1.jsp の基本構造です。
<html>
<head>
<%@ taglib uri="/struts-tags" prefix="s" %>
<script type="text/javascript" src="../js/page1.js"></script>
</head>
<body>
<s:form name="form1" id="form1" action="" method="post" namespace="">
<div data-role="page" id="firstPage">
<div id="xyz" class = "xyz"></div>
.....//other elements
</div>
</s:form>
<script type="text/javascript">
.... // do stuff and submit "form1" to process.action
</script>
</body>
</html>
page2.jsp の基本構造:
<html>
<head>
<script type="text/javascript" src="../js/page2.js"></script>
</head>
<body>
<div data-role="page" id="secondPage">
<div id="xyz" class = "xyz"></div>
.....//other elements
</div>
</body>
</html>
firebug で見られる HTML:
<html>
<head>
<%@ taglib uri="/struts-tags" prefix="s" %>
<script type="text/javascript" src="../js/page1.js"></script>
</head>
<body>
<form name="form1" id="form1" method="post" action="process.action">
<div data-role="page" id="firstPage">
<div id="xyz" class = "xyz"></div>
.....//other elements
</div>
<div data-role="page" data-external-page="true" id="secondPage">
<div id="xyz" class = "xyz"></div>
.....//other elements
</div>
<form>
<script type="text/javascript">
.... // do stuff and submit "form1" to process.action
</script>
</body>
</html>
したがって、これにより、ID "xyz" を持つ 2 つの要素と、2 つの jsps で同じ値を持つ他の ID を持つ同じ html フォームが生成されます。私は何を間違っていますか、またはこれを防ぐにはどうすればよいですか?
編集:data-external-page="true"
レンダリングされたhtmlにdiv「secondPage」が追加されているのがわかります。page2.jsp で明示的に false に設定しようとしましたが、どちらも機能します。
また、リフレッシュ効果もあります。ページに入力するために必要なデータはリロード時に存在しませんが、この特定の問題はリロード時に解消されます。
編集: 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>
<package name="location" namespace="/location">
<action name="start" class="StartAction">
<result name="success">/WEB-INF/templates/location/page1.jsp</result>
</action>
<action name="process" class="ProcessAction">
<result name="success">/WEB-INF/templates/location/page2.jsp</result>
</action>
</package>
</struts>
ProcessAction.java:
public class ProcessAction{
private String xyz;
//other elements
//getters and setters
@Override
public String process() {
//get data from DB and set it to xyz and other elements,
//whose corresponding elements are in page2.jsp
return SUCCESS;
}
}