错误是我在下面的inputTextarea
。只有最后一行可以记录来自inputTextarea
的任何输入,换句话说,只记录最后一行,将其value
挂钩到#{PostComment.comment.comment}
。这是为什么?
<h:form id="userCommentList" >
<p:dataTable value="#{CentralFeed.profileComments}" var="item">
<p:column>
<!-- Original Comment -->
<h:outputText value="#{item.comment}"/>
<!-- ****BUG IS THIS INPUTTEXTAREA BELOW*** -->
<h:inputTextarea id="keyword" value="#{PostComment.comment.comment}"/>
<p:commandButton actionListener="#{PostComment.postProfileComment(item.id)}"
value="Post" update="userCommentList" />
</p:column>
</p:dataTable>
</h:form>
修改
我改变了inputTextarea
和commandButton
,就像你建议的BalusC一样。我在Comment
实体内添加了另一个字段调用newComment
,因此Comment
看起来像这样
Comment
+ id
+ comment
+ newComment --> I have @Transient to this field so it wont map to the database. I also set its default value to the empty string in the constructor
+ ...
...
<p:column>
...
<h:inputTextarea id="keyword" value="#{item.newComment}" rows="2" />
<p:commandButton actionListener="#{PostComment.postReply(item)}" value="Post" />
</p:column>
我希望item.newComment
能保留我输入的值,所以当我将对象item
传递给postReply
时,我可以提取newComment的内容,但它是空字符串。所以我输入的内容都不会绑定到newComment
。知道为什么吗?
答案 0 :(得分:2)
您实质上是将表中多个textareas的值绑定到同一个 bean属性。在请求处理期间,JSF将使用表中的 all textareas值更新此属性,每次都覆盖前一个,直到最后一行中的那个为止。这就是为什么你只能在最后一行看到一个值。
您需要将textarea值绑定到行对象,在您的情况下为#{item}
。 E.g。
<h:inputTextarea id="keyword" value="#{item.newComment}"/>