現在、primefaces 3.3 を使用していますが、このバージョンはデータテーブルをサポートevent="rawToggle"
していません。onExpandStart
そのため、 の代わりにを使用することにしましたrowToggle
が、別の問題に遭遇しました。ここでは、展開された行として別のデータテーブルを配置したいので、 で 1 つの行を切り替えるたびに、その行のnodetable
を渡して、そのノードのすべてのコンテンツを取得する必要があります。"があれば問題なくできます! でも、dataTable の属性を使用すると で が取得できません。解決方法を知っている人はいますか? の中に隠し input タグを入れてみました。 , しかし、私が得る値は null です. 数日間取り組んできましたが、まだアイデアがありません. 助けてくださいお願いします!nodeId
backingbean
event="rowToggle
onExpandStart
somenode.nodeId
backingbean
<input type="hidden" name="hidden" value="#{somenode.nodeId}"/>
rowToggler
backingbean
<p:dataTable id="nodetable" value="#{nodeedit.list}" var="somenode"
styleClass="datatable" editable="true"
onExpandStart="#{nodeedit.toggle(somenode.nodeId)}" >
<p:ajax event="rowEdit" listener="#{nodeedit.save('node')}"/>
<p:column style="width:4%">
<p:rowToggler>
<h:form>
<input type="hidden" name="hidden" value="#{somenode.nodeId}"/>
</h:form>
</p:rowToggler>
</p:column>
<p:column>
<f:facet name="header">ID</f:facet>
<h:form>
<h:commandLink action="nodeedit">#{somenode.norder}</h:commandLink>
</h:form>
</p:column>
<p:column headerText="Name">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{somenode.title}" />
</f:facet>
<f:facet name="input">
<p:inputTextarea value="#{somenode.title}" style="width:100%"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Edit" style="width:50px">
<p:rowEditor />
</p:column>
<p:rowExpansion>
<p:dataTable id="contentId" var="content"
value="#{nodeedit.contents}" id="contents" editable="true">
<p:ajax event="rowEdit" listener="#{nodeedit.save('content')}"/>
<p:column headerText="Text" style="width:450px">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{content.text}" escape="false" />
</f:facet>
<f:facet name="input">
<p:inputTextarea value="#{content.text}" style="width:100%"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Edit" style="width:50px">
<p:rowEditor />
</p:column>
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
別の方法も試しました。ノードのコンテンツもオブジェクトであり、定義したノード クラスでは
List<LibContent> contents = new ArrayList<LibContent>();
だから、siebzOrが言ったように、私は自分のjsfに次のように書いた:
<p:rowExpansion>
<p:dataTable var="content" value="#{somenode.content}">
**<p:ajax event="rowEdit" listener="#{nodeedit.save()}"/>**
<p:column>
<h:outputText value="#{content.someValue}" />
</p:column>
<!-- Other columns -->
</p:dataTable>
</p:rowExpansion>
そしてbackingbean nodeeditで、私は持っています
public void save() {
for (Content content : node.contents)
System.out.println("content.text");
}
ページで何をしても content.text が変わらないことがわかりました。しかし、でList<Content> contents = new ArrayList<Content>()
直接定義するとnodeedit
、新しい値を取得できます!! nodeId
そのため、ノード テーブルを切り替えて の内容を更新するたびにを取得しようとしましたbackingbean
。私はそれで何か悪いことをしましたか?