2011-06-22 39 views
1

我有一个复杂的ICEFaces XHTML页面,根据用户在页面上输入数据时设置的标志,有条件地呈现特定组件。我想要做的是直接将焦点集中到某个特定领域,而不是在页面的初始渲染过程中。如何在初始渲染后设置ICEFaces组件的焦点?

ICEFaces documentation暗示我可以使用outputBody组件的焦点属性来做到这一点。具体来说:

如果设置初始焦点,则必须在第一次渲染调用时渲染焦点组件,否则只有在组件渲染时才设置焦点属性。

这似乎暗示我可以在我的条件组件被渲染时操纵焦点属性值但是,我没有看到inputText组件的任何属性允许我在组件渲染时更改值。

我误会了文档吗?何时何地可以更改outputBody的焦点属性值,以便条件呈现字段在出现时获取输入焦点?还是我使用错误的工具来解决这个问题?

回答

0

由于我同时使用Seam和ICEFaces,所以我无法从服务器端Java代码中可靠地调用Javascript。但是,我可以在我的XHTML中在ui:component中添加必要的Javascript,这些ui:component是有条件呈现的,接近我需要关注的输入字段。我的XHTML的相关部分如下所示:

<ice:panelGroup id="textPanelInput" > 
    <ice:form id="textInputForm" partialSubmit="true" style="vertical-align:middle;"> 
     <ice:inputText id="textInput" valueChangeListener="#{appField.valueChangeListener}" 
         size="#{appField.fieldDefLengthAsInt}" 
         value="#{appField.value}" 
         styleClass="fieldStyle" rendered="#{appField!=null}" 
         >      
     </ice:inputText> 
     <ice:message id="jo" for="textInput" /> 
    </ice:form> 
</ice:panelGroup> 
<script type="text/javascript">document.getElementById('panelsFields:0:textInputForm:textInput').focus();</script> 

底部的Javascript行是我添加的行来解决我的问题。以上所有代码均位于ui:component块中,该块可以基于其他条件呈现或不呈现。当这个ui:component块被渲染时,我的Javascript会随之运行,并将输入焦点设置为我所需的输入字段。

0

您可以使用一些Javascript来设置元素的焦点。

这里是要做到这一点所需的Java代码:

 JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), 
        "document.getElementById('myForm:myTxtBox').focus();"); 

myTxtBox是你的表单元素的ID,并myForm是表单的ID。

无论您在何处改变某些变量的值来渲染/隐藏字段,都可以使用此功能。

+0

不幸的是,在我的测试,这种方法有时工作,有时没有,基于什么操作导致系统来呈现我的页面或显示我的条件字段。我能够验证addJavascriptCall()总是在我需要时触发;然而,Javascript本身似乎并不总是执行。我使用的Seam框架可能会让问题复杂化。在这个问题的接受答案中显示的方法似乎在100%的时间内工作。 – dbisdorf

1

也许你可以使用这个

JavascriptContext.applicationFocus(FacesContext.getCurrentInstance(), "form:fieldM"); 
0

ICEfaces的支持JavaScript API已设定对焦功能。因此,你可能会在未来一段这样使用它:

<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     ice.applyFocus(elementId); 
    }); 
</script> 

elementIdjsf component clientId

ICEFaces javascript Api