0

我有这段代码用于选择在 jsf 表中显示多少行:

<!-- Set rows per page -->
<h:outputLabel for="rowsPerPage" value="Rows per page" />
<h:inputText id="rowsPerPage" value="#{AccountsController.rowsPerPage}" size="3" maxlength="3" />
<h:commandButton styleClass="bimage" value="Set" action="#{AccountsController.pageFirst}" >
    <f:ajax render="@form" execute="@form"></f:ajax>
</h:commandButton>&nbsp;
<h:message for="rowsPerPage" errorStyle="color: red;" />

我想以这种方式编辑代码:我想用h:selectOneManu和选项替换代码以插入具有 AJAX 支持的自定义值:

<h:selectOneMenu id="setrows" value="#{AccountsController.rowsPerPage}" converter="javax.faces.Integer" maxlength="3">                                    
    <f:selectItem itemValue="10" itemLabel="10" />
    <f:selectItem itemValue="50" itemLabel="50" />
    <f:selectItem itemValue="100" itemLabel="100" />
    <f:selectItem itemValue="500" itemLabel="500" />                                    
    <f:selectItem itemValue="332" itemLabel="Custom" />
    <f:ajax render="customrowperpage" />
</h:selectOneMenu>&nbsp;
<h:inputText id="customrowperpage" value="#{AccountsController.rowsPerPage}" rendered="#{AccountsController.rowsPerPage == '332'}" required="true" />

但由于某种原因,代码不起作用。你能帮我找出问题所在吗?h:selectOneMenu当我从列表 AJAX 调用中选择数字以更新表单时,我还想更新 AJAX 功能。

4

1 回答 1

3

有2个问题。

首先,由于 JavaScript 在客户端运行,您无法对未呈现到客户端的 JSF 组件进行 ajax 更新。那么在 HTML DOM 树中就没有 JavaScript 可以选择、操作和替换的东西了。您应该改为 ajax 更新始终呈现给客户端的 JSF 组件。

<h:panelGroup id="customrowperpage">
    <h:inputText value="#{AccountsController.rowsPerPage}" required="true" 
        rendered="#{AccountsController.rowsPerPage == '332'}" />
</h:panelGroup>

另请参阅为什么当我想进行 ajax 更新时,我需要将带有 render="#{some}" 的组件嵌套在另一个组件中?

其次, aInteger 从不 等于a String。您正在rendered针对Integer rowsPerPage. String '332'删除那些单引号,使其成为一个完全有价值的数字。

<h:panelGroup id="customrowperpage">
    <h:inputText value="#{AccountsController.rowsPerPage}" required="true" 
        rendered="#{AccountsController.rowsPerPage == 332}" />
</h:panelGroup>
于 2012-09-21T00:42:29.060 回答