私はc:set
とui:param
を試しましたが、最終的には間違ったことをしました。ここで変数をJSFに格納する方法/ c:setとui:paramの問題
は重要なXHTMLの一部です:
<h:form id="formTable">
<p:dataTable editable="true" value="#{types.dataList}" var="datalist" style="width:90%; margin-bottom:20px"
rows="10" paginator="true" rowsPerPageTemplate="10,25" resizableColumns="true" liveResize="true" tableStyle="width:auto">
<!-- save the old value for the edit action-->
<c:set var="oldValue" value="#{datalist.getType()}"/>
<!-- column for testing purpose-->
<p:column>
<h:outputText value="#{oldValue}" />
</p:column>
<p:column headerText="Type" sortBy="#{datalist.type}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{datalist.type}" />
</f:facet>
<f:facet name="input">
<h:inputText value="#{datalist.type}" binding="#{inputUpdateType}" required="true" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Date" sortBy="#{datalist.lastModifyDate}">
<h:outputText value="#{datalist.lastModifyDate}"/>
</p:column>
<p:column headerText="Edit">
<p:rowEditor rendered="#{!datalist.dependenciesFound}"/>
<h:graphicImage value="../images/attention.png" rendered="#{datalist.dependenciesFound}" />
</p:column>
<p:column headerText="Delete">
<p:commandLink action="#{types.delete(datalist.type)}" rendered="#{!datalist.dependenciesFound}" update=":formTable">
<p:graphicImage url="../images/delete.png" />
<p:confirm header="Confirmation" message="Are you sure?" icon="ui-icon-alert" />
</p:commandLink>
<h:outputText value="Not editable because of dependency" rendered="#{datalist.dependenciesFound}"/>
</p:column>
<!-- We edit/update the value here. This is where the old value is needed-->
<p:ajax event="rowEdit" listener="#{types.update(oldValue, inputUpdateType.value)}"/>
</p:dataTable>
<p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
<p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
<p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>
</h:form>
私は、これはやや理解を願っています。 私のプロジェクトではPrimefaces 6.1を使用しています。このテーブルの行を編集するには、古い値を保存し、その値を下のajax呼び出しで使用する必要があります。私はこれが必要です。なぜなら、このアプリケーションの背後にDBテーブルが必要です(IDはこの値です)。 編集した値は変数inputUpdateType
に格納されます。
私の問題:私は、新しい値を入力して、[編集]を押すと
は、古い値は、アプリケーションがupdateメソッドに入ったときに、編集した値と同じです。どの値が渡されたかを確認するために、更新メソッドでログエントリを作成しました。 c:set
とui:param
と同じです。
私は間違っていますか?どうすればこの作品を作れますか?
編集:ここでは は私が豆に保存された古い値を取得しようとする方法である:
<p:ajax event="rowEdit" listener="#{types.update(types.dataListOld.toArray()[rowIndex].getType(), inputUpdateType.value)}"/>
https://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-senseから始めてください。 iteratimg h/ui/pコンポーネントでは、jstl 'c:set'を介してvarを割り当てることはできません。 Thw jstlはそれらの前に処理されます – Kukeltje
私がそこで読むことができるので、試したようにすることはできません。別の方法がありますか?エンティティBeanを編集して古い値を保存できるようになりましたが、動作しますが、私はこの解決策が嫌いです。 – kinglite
コントローラに古いエンティティのインスタンスを保存して比較しますか?なぜ、この値をUIレイヤーからコントロール/サービスレイヤーに渡す必要がありますか?それはすでに利用可能なサーバー側である必要があります。 – Kukeltje