如何在JSF模板中定义将在别处定义的onLoad函数

时间:2010-03-03 23:00:37

标签: java jsp jsf facelets

我正在为我的网站设计视图,该网站有一个标准的登录和登录页面,我想要为我的登录页面调用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的页面都会填充这个函数。这可能吗?

谢谢!

1 个答案:

答案 0 :(得分:7)

我至少可以想到两种方式:

  1. 使用<ui:define name="header">定义标题部分,并在其中放置一个javascript函数(function bodyLoaded(){..}) - 每页都不同,然后通过<body onload="bodyLoaded();">

  2. 使用facelets params。即<body onload="#{onLoadJS}"/>以及包含模板的每个页面使用<ui:param name="onLoadJS" value="document.getElementById(..)" />