0

現在、データベースのデータを表示するデータテーブルがあります。ユーザーがデータテーブルの現在の行を編集し(外部フォームやボタンがなくてもデータテーブル自体の内部)、それをバッキングBeanに送信して、DBを更新する方法を追加しようとしています。

ユーザーが特定の行の編集ボタンを押して、出力テキストを入力テキストボックスに変更して編集できるようにする条件付きレンダリングがあります。

一般的な外観:

inputText1 inputText2 inputText3(保存ボタン)

私が抱えている問題は、ユーザーが各inputTextで手動でreturnキーを押さない限り、Beanの値が更新されないことです。保存ボタンは、データベースの更新メソッドを呼び出す以外のことは何もしていないようですが、テーブルの元の(更新されていない)データを使用します。私はこれに何時間も取り組んできましたが、何も進歩していないようです。

誰かが私を正しい方向に向けることができれば、私は多くの義務を負います。基本的に私が欲しいのは、ユーザーがボックスに入力した値をキャプチャする各行(保存)のボタンです。

コード例:

<h:dataTable id="dt1" value="#{Results.players}" var= "item" bgcolor="#F1F1F1" border="10" cellpadding="5" cellspacing="3">
    <h:column>
        <f:facet name="header"><h:outputText value="ID"/></f:facet>
        <h:outputText value="#{item.id}"/>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="Name"/>
        </f:facet>
        <h:outputText value="#{item.name}" rendered="#{not item.editable}"/>
        <h:form>
            <h:inputText value="#{Results.currentName}" rendered="#{item.editable}" immediate="true"/> 
        </h:form>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="Department"/>
        </f:facet>
        <h:outputText value="#{item.department}" rendered="#{not item.editable}"/>
        <h:inputText value="#{Results.currentDepartment}" rendered="#{item.editable}" immediate="true"/> 
    </h:column>

そしてボタン。編集は通常どおりに表示され、クリックすると[保存]ボタンが表示され、行が入力テキストとしてレンダリングされます。

<h:column>
    <f:facet name="header">
        <h:outputText value="Edit"/>
    </f:facet>
    <h:form>
        <h:commandLink value="Edit" rendered="#{not item.editable}" action="#{Results.editPlayers(item)}"/>
        <h:commandLink value="Save" rendered="#{item.editable}" action="#{DBupdate.updatePlayers(item)}"/>
    </h:form>
</h:column>
4

1 に答える 1

0

これらの場合のより一般的な問題の1つは、画面フィールドを更新しないことです。jsfにフィールドを強制的に更新させる1つの方法は、次のとおりです。

<h:commandLink ..>
    <f:ajax event="click" render="@all" execute="@this" />
</h:commandLink>

または

<h:commandLink ..>
    <f:ajax render="@all" execute="@form" />
</h:commandLink>

よろしく、

于 2012-08-27T14:09:15.687 に答える