未调用 p:dataTable 的 rowEdit 事件上的 Bean 方法
Bean method on rowEdit event of p:dataTable is not invoked
我正在尝试从 <p:dataTable>
调用 bean 方法编辑行,但问题是 bean 方法未在 rowEdit
事件上调用。如果有人能给我解决方案,那将是非常可观的。
此外,我的 bean 已经在视图范围内,即使在会话范围内也没有工作...我已经尝试了所有三个范围。
我的代码如下:
<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();
}
}
感谢@tiny 问题通过将 getter 方法中的列表检索代码替换为 postConstruct 注释中的 init() 来解决。
下面是更正后的代码
<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>
调用 bean 方法编辑行,但问题是 bean 方法未在 rowEdit
事件上调用。如果有人能给我解决方案,那将是非常可观的。
此外,我的 bean 已经在视图范围内,即使在会话范围内也没有工作...我已经尝试了所有三个范围。
我的代码如下:
<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();
}
}
感谢@tiny 问题通过将 getter 方法中的列表检索代码替换为 postConstruct 注释中的 init() 来解决。 下面是更正后的代码
<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();
}
}