我正在为我的网站设计视图,该网站有一个标准的登录和登录页面,我想要为我的登录页面调用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组合标签,因此我无法在login.xhtml中使用<body/>
标签(至少我试图这样做)。
有没有办法用我描述的结构来实现这一目标?我想这样做的方法是让onLoad调用模板中的一个函数,然后每个带有ui:define的页面都会填充这个函数。这可能吗?
谢谢!
答案 0 :(得分:7)
我至少可以想到两种方式:
使用<ui:define name="header">
定义标题部分,并在其中放置一个javascript函数(function bodyLoaded(){..}
) - 每页都不同,然后通过<body onload="bodyLoaded();">
使用facelets params。即<body onload="#{onLoadJS}"/>
以及包含模板的每个页面使用<ui:param name="onLoadJS" value="document.getElementById(..)" />