我写了两个JSP页面:outerPage.jsp
和innerPage.jsp
outerPage.jsp
包括innerPage.jsp
innerPage.jsp
有一个文本字段和一个按钮。
我需要在页面加载时将注意力集中在innerPage.jsp
上的textFiled
我编写的JavaScript在outerPage.jsp
的正文加载期间调用,但它不起作用。
以下是outerPage.jsp
:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<html>
<f:view>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Outer Viewer</title>
<meta name="description" content="Outer Viewer" />
</head>
<body id="outerMainBody">
<rich:page id="richPage">
<rich:layout>
<rich:layoutPanel position="center" width="100*">
<a4j:outputPanel>
<f:verbatim><table style="padding: 5px;"><tbody><tr>
<td>
<jsp:include page="innerPage.jsp" flush="true"/>
</td>
</tr></tbody></table></f:verbatim>
</a4j:outputPanel>
</rich:layoutPanel>
</rich:layout>
</rich:page>
</body>
</f:view>
</html>
以下是innerPage.jsp
:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<f:verbatim><html></f:verbatim>
<f:subview id="innerViewerSubviewId">
<f:verbatim><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Inner Viewer </title>
<script type="text/javascript">
//This script does not called during the page loading (onload)
function cursorFocus()
{
alert("Cursor Focuse Method called...");
document.getElementById("innerViewerForm:innerNameField").focus();
alert("Cursor Focuse method end!!!");
}
</script>
</head>
<body onload="cursorFocus();"></f:verbatim>
<h:form id="innerViewerForm">
<rich:panel id="innerViewerRichPanel">
<f:facet name="header">
<h:outputText value="Inner Viewer" />
</f:facet>
<a4j:outputPanel id="innerViewerOutputPanel" >
<h:panelGrid id="innerViewerSearchGrid" columns="2" cellpadding="3" cellspacing="3">
//<%-- Row 1 For Text Field --%>
<h:outputText value="inner Name : " />
<h:inputText id="innerNameField" value=""/>
//<%-- Row 2 For Test Button --%>
<h:outputText value="" />
<h:commandButton value="TestButton" action="test" />
</h:panelGrid>
</a4j:outputPanel>
</rich:panel>
</h:form>
<f:verbatim></body></f:verbatim>
</f:subview>
<f:verbatim></html></f:verbatim>
不会调用cursorFocus()
脚本。
提前致谢。
答案 0 :(得分:1)
遇到此类问题时,
只需在标记
之前调用页面末尾的脚本您的身体标签将更改为
...content above body
<body>
...content inside body
<script type="text/javascript">cursorFocus();</script>
</body>
...content after body
答案 1 :(得分:0)
您的HTML在语法上无效。生成的HTML输出必须如下所示:
<!doctype declaration>
<html>
<head>...</head>
<body>...</body>
</html>
但你的结局如下:
<!doctype declaration>
<html>
<head>...</head>
<body>
<!doctype declaration>
<html>
<head>...</head>
<body>...</body>
</html>
</body>
</html>
在浏览器中右键单击页面并查看源。看起来不错吗?不,W3 markup validator如果你已经测试了它,也应该暗示一下。
由于生成的HTML格式错误,因此Web浏览器不知道如何以及在何处找到Javascript函数中所需的HTML DOM元素。行为未指定。
您需要按如下方式重写页面:
outerPage.jsp
<!doctype declaration>
<f:view>
<html>
<head>
<title>...</title>
<meta>...</meta>
<script>...</script>
</head>
<body>
<jsp:include />
</body>
</html>
</f:view>
innerPage.jsp
<f:subview>
<h:form>
<h:inputText />
</h:form>
</f:subview>
确实,您应该 将<!doctype>
,<html>
,<head>
和<body>
标记放在innerPage.jsp
中!只需将其编码为实际包含,然后仅使用 <f:subview>
进行编码。
这样它最终会在语法上有效:
<!doctype declaration>
<html>
<head>
<title>...</title>
<meta>...</meta>
<script>...</script>
</head>
<body>
<form>
<input type="text" />
</form>
</body>
</html>
一旦你对齐了所有的HTML,你就可以专注于JavaScript功能的运作。检查生成的HTML源中的<form>
元素的生成客户端ID(webbrowser中的右键单击页面,查看源),然后在document.getElementById()
中使用它。
答案 2 :(得分:0)
您错过了脚本的subView ID:
function cursorFocus()
{
alert("Cursor Focuse Method called...");
document.getElementById("innerViewerForm:innerNameField").focus();
alert("Cursor Focuse method end!!!");
}
</script>
所以你使用以下脚本并检查它
function cursorFocus()
{
document.getElementById("innerViewerSubviewId:innerViewerForm:innerNameField").focus();
}