没有调用p:dataTable的rowEdit事件的Bean方法 [英] Bean method on rowEdit event of p:dataTable is not invoked

查看:206
本文介绍了没有调用p:dataTable的rowEdit事件的Bean方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从< p:dataTable> n调用bean方法编辑行,但问题是bean方法未在 rowEdit 事件。如果有人可以给我解决方案,这将是可以理解的。

I am trying edit row from <p:dataTable> n call bean method but the problem is bean method is not invoked on rowEdit event. It will be appreciable, if someone could give me the solution.

此外,我的bean已经在View Scope中,甚至不能在会话范围内工作...我尝试过对于所有三个范围。

Also, my bean is already in View Scope, even not working in session scope... I have tried for all three scopes.

我的代码如下:

<h:form id="commentList">
    <p:dataTable id="commentTable" editable="true" paginator="true" rows="10" var="comment" value="#{commentAction.list(uID)}" class="table table-striped table-bordered table-hover commentTable" widgetVar="commentListTable">
        <p:ajax event="rowEdit" listener="#{commentAction.updateCommentStatus}"/>
        <p:column filterBy="#{comment.commentId}" footerText="" headerText="Comment Id" filterMatchMode="contains" sortBy="#{comment.commentId}">
            <h:outputText value="#{comment.commentId}" id="commentId"/>
        </p:column>
        <p:column filterBy="#{comment.selectedText}" headerText="Selected Text" sortBy="#{comment.selectedText}">
            <h:outputText value="#{comment.selectedText}" id="selectedText"/>
        </p:column>
        <p:column filterBy="#{comment.commentText}" headerText="Comment" sortBy="#{comment.commentText}">
            <h:outputText value="#{comment.commentText}" id="commentText" escape="false"/>
        </p:column>
        <p:column filterBy="" headerText="Comment From" sortBy="">
            <h:outputText value="" id="commentFrom"/>
        </p:column>
        <p:column filterBy="#{comment.insertedOn}" headerText="Date/Time" sortBy="#{comment.insertedOn}">
            <h:outputText value="#{comment.insertedOn}" id="insertedOn"/>
        </p:column>
        <p:column filterBy="#{comment.commentStatus}" headerText="Comment Status" sortBy="#{comment.commentStatus}">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{comment.commentStatus}" id="commSatus"/>
                </f:facet>
                <f:facet name="input">
                    <h:selectOneMenu value="#{commentAciton.commentStatus}" id="commentStatus" class="commentSelectBox">
                        <f:selectItem itemLabel="UpdateStatus" itemDisabled="true"/>
                        <f:selectItem itemValue="Open" itemLabel="Open"/>
                        <f:selectItem itemValue="Close" itemLabel="Close"/>
                        <f:selectItem itemValue="Cancel" itemLabel="Cancel"/>
                    </h:selectOneMenu>
                </f:facet>
            </p:cellEditor>
        </p:column>
        <p:column style="width:32px">
            <p:rowEditor />
        </p:column>
    </p:dataTable>
</h:form>

而bean方法是:

public void updateCommentStatus(RowEditEvent event) {
    try {
        logger.info("comment Iddddddddddd: " + commentId);
        logger.info("comment Statusssssss: " + this.commentStatus);
        Comment comment = (Comment) event.getObject();
        logger.info("new value: " + comment.getCommentStatus());
    } catch (Exception ex) {
        logger.info("Exception caught in updateCommentStatus in CommentAction ..." + ex.getMessage());
        ex.printStackTrace();
    }
}


推荐答案

Thanx通过将getter方法中的列表检索代码替换为postConstruct注释中的init()来解决@tiny问题。
以下是更正的代码

Thanx to @tiny problem is resolved by replacing list retrieving code from getter method to init() in postConstruct annotation. Below is the corrected code

<p:dataTable id="commentTable" editable="true" paginator="true" rows="10" var="comment" value="#{commentAction.commentList}" class="table table-striped table-bordered table-hover commentTable" widgetVar="commentListTable">
<p:ajax event="rowEdit" listener="#{commentAction.updateCommentStatus}"/>
  ....
  ....
  ....
</p:dataTable>



@PostConstruct
    public void init(){
        logger.info("urs: "+ursId);
        CommentManager commentManager = new CommentManager();
        try {
            commentList = commentManager.list(1); //hardcoding ryt now
        } catch (Exception ex) {
            logger.info("Exception caught in init in CommentAction ..." + ex.getMessage());
            ex.printStackTrace();
        }
    }



    public void updateCommentStatus(RowEditEvent event){
        try{
            CommentManager commentManager = new CommentManager();
            Comment comment = (Comment)event.getObject();
            logger.info("*****************************************************");  
            logger.info("comment Iddddddddddd: " +comment.getCommentId());
            logger.info("comment Statusssssss: " +comment.getCommentStatus());
            commentManager.updateCommentStatus(comment);
        } catch(Exception ex){
            logger.info("Exception caught in updateCommentStatus in CommentAction ..." + ex.getMessage());
            ex.printStackTrace();
        }
    }

这篇关于没有调用p:dataTable的rowEdit事件的Bean方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆