我正在为我的站点设计视图,该站点具有标准的登录和登录页面,并且我希望为我的登录页面(而不是我的其他页面)调用onLoad函数。我有一个template.xhtml文件,其中包含以下内容:
<div id="content"> <ui:insert name="content"/> </div>
然后在login.xhtml中,我有:
<ui:define name="content"> ... </ui:define>
通常我会将其放在login.xhtml中:
<body onload="document.getElementById('login_form:name').focus();">
但是,由于我使用的是JSF的ui组成标签,因此我无法<body/>在login.xhtml中使用该标签(至少是我尝试这样做的方式)。
<body/>
有没有一种方法可以通过我描述的结构来完成?我想到的方法是让onLoad在模板中调用一个函数,然后每个带有ui:define的页面都会填充此函数。那可能吗?
谢谢!
我至少可以想到两种方式:
用定义标题部分<ui:define name="header">,并在其中放置一个javascript函数(function bodyLoaded(){..})-每个页面都不同,然后通过进行引用<body onload="bodyLoaded();">
<ui:define name="header">
function bodyLoaded(){..}
<body onload="bodyLoaded();">
使用facelets参数。即<body onload="#{onLoadJS}"/>和每个页面上包括模板的使用<ui:param name="onLoadJS" value="document.getElementById(..)" />
<body onload="#{onLoadJS}"/>
<ui:param name="onLoadJS" value="document.getElementById(..)" />