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 が選択、操作、置換できるものは何もありません。代わりに、常にクライアント側にレンダリングされるJSF コンポーネントを ajax 更新する必要があります。

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

ajax で更新したい場合、別のコンポーネントで render="#{some}" を使用してコンポーネントをネストする必要があるのはなぜですか?も参照してください。

次に、 a がaと等しくなるInteger こと はありません。あなたはに対して属性テストを行っています。これらの単一引用符を削除して、完全な数値にします。StringrenderedInteger rowsPerPageString '332'

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