多个h:inputTextarea到单个后端变量

时间:2013-10-26 04:22:35

标签: jsf-2.2 omnifaces

我正在尝试创建一个评论页面,其中包含一系列评论(通过o:tree布局,感谢BalusC),任何人都可以回复。我通过p:inplace显示h:inputTextArea,因此每页有多个textinputareas,带有多个命令按钮回复。我正在尝试将命令按钮映射到特定textinputarea的单个后端变量,以便每次按下命令按钮时都不会处理每个textinputarea。

编辑:代码示例

<o:tree value="#{xPost.post.comments.treeModel}" var="comment" varNode="node">

    <o:treeNode>
        <o:treeNodeItem>
            <p:panel>
                <h:outputText value="#{comment.commentText}" />
                <p:inplace label="Reply">
                    <br/>
                    <p:editor value="#{post.newComment}" />
                    <p:commandButton action="#{post.saveComment('#{comment.ID'})}" value="Comment" ajax="false" />
                </p:inplace>
                <o:treeInsertChildren />
            </p:panel>
        </o:treeNodeItem>
    </o:treeNode>
</o:tree>

要添加到此,我正在使用hibernate验证,据我所知,只能通过注释验证:

@NotBlank(message =“请输入评论。”) @Length(min = 1,max = 10000,message =“注释必须介于1到10,000个字符之间。”) @SafeHtml(message =“无效的富文本。”) private String newComment =“”;

所以从上面的代码中,当我有2+ p:editor时,每个编辑器都在处理并填充相同的back-bean变量。如何强制commentButton仅验证特定的inputBox / p:编辑器并设置backing-bean变量。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

只需给每个编辑器自己的表单。换句话说,将<h:form><o:tree>之外移至<o:treeNodeItem>内。这将最终呈现多个表单,每个表单都有自己的编辑器和按钮。

答案 1 :(得分:0)

  1. 您需要提供人员的详细信息,以便为您提供更多帮助
  2. 在你的情况下,我猜测以下应该做的伎俩:

    <ui:repeat var="comment" ...> // or equivalent like o:tree
      <h:inputText value="#{comment.message} .../>
      <h:commandButton actionListener="#{bean.updateMessage}">
        <f:setPropertyActionListener from="#{comment}" to="#{bean.commentBeingProcessed}"/>
        <!-- Or alternatively, you can set the comment object on to the command button
             and receive it on the server side as event.getComponent().getAttribute("comment")
          <f:attribute name="comment" value="#{comment}"/>
        -->
      </h:commandButton>
    </ui:repeat>
    
  3. 希望有所帮助。