Jsf Faces ActionEvent.getSource始终为空
我有一个问题,我的Faces ActionEvent返回一个源,但是检查!=null返回false。 疯狂的事实是,在调试模式下,我得到一个填充的ActionEvent变量 我已将代码分解到重要部分 豆子: 视图:Jsf Faces ActionEvent.getSource始终为空,jsf,datatable,Jsf,Datatable,我有一个问题,我的Faces ActionEvent返回一个源,但是检查!=null返回false。 疯狂的事实是,在调试模式下,我得到一个填充的ActionEvent变量 我已将代码分解到重要部分 豆子: 视图: 删除 我没有得到错误,它只是跳过If块,因为“ev.getSource()!=null” 提前感谢, TLS操作事件不能为null。这将是所使用的JSF实现中的一个巨大缺陷。但是,在这种特殊情况下,ActionEvent#getSource()可以是htmldataable的实例
删除
我没有得到错误,它只是跳过If块,因为“ev.getSource()!=null”
提前感谢,
TLS操作事件
不能为null
。这将是所使用的JSF实现中的一个巨大缺陷。但是,在这种特殊情况下,ActionEvent#getSource()
可以是htmldataable
的实例。它是HtmlCommandButton
的一个实例,因为您是从
调用它的。因此,整个if
块将永远不会通过
这就是说,这是一种非常笨拙的方法,可以让当前的人员删除。也许您过于关注完全过时的基于JSF1.x的书籍/教程/资源。有很多更好的方法来获取当前的人员
,首先是:
<h:dataTable value="#{hibernateDataOutput.persons}" var="person">
<h:column>
<h:commandButton action="#{hibernateUserHandling.deleteUser(person)}" image="delete.jpg" />
</h:column>
</h:dataTable>
另见:
您确定这是因为检查为null而不是instanceof check吗?可能源代码是UICommand?我将检查分为2个if块,并在null失败;)您的deleteUser
方法不是直接从JSF调用的,而是从hibernateUserHandling
隐式调用的,它传递了一个似乎是使用反射调用bean参数的方法名参数。如果我想说的话,那就是你问题的原因。为什么不直接调用托管bean deleteUser action listener方法?@maple_shaft在我的环境中,直接调用HibernateUserHandling.deleteUser()不起作用,因此我必须像调用HibernateUserHandling['deleteUser']@TLS一样调用它,根据actionListener的stacktrace,您不需要括号。它假设ActionEvent将被传递。当我尝试直接调用该方法时,它会导致我在topicSo中编辑的Stacktrace错误。您还没有修复以前的问题吗?我已经回答了这是如何造成的以及您如何解决这一问题:对于替代方案和其他深入的解释,请遵循“请参阅”链接。感谢您的解决方案!我再次检查了它,这次它跳过了instanceof的块。上次我试过它时,它总是跳过空块。但问题是,在我的公司,我们正在进行一种更大的项目实施,并使用Tomcat6。我想我们的经理不会为tomcat 7服务器更改它。我强烈建议您解决EL问题,或者至少按照“请参阅”链接了解其他方法。你原来的方式太笨拙了。例如,请改用
。非常感谢您,现在它工作正常!setPropertyActionListener就是解决方案。
<html>
<body>
<ui:composition template="./generalTemplate.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:define name="content">
<h:outputStylesheet library="css" name="cssHibernate.css" />
<h:form id="main">
<h:dataTable value="#{hibernateDataOutput.persons}" var="list"
styleClass="order-table"
headerClass="order-table-header"
rowClasses="order-table-odd-row,order-table-even-row">
<h:column>
<f:facet name="header">Delete</f:facet>
<h:commandButton id="delete" actionListener="#{hibernateUserHandling['deleteUser']}" image="delete.jpg"/>
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</body>
</html>
<h:dataTable value="#{hibernateDataOutput.persons}" var="person">
<h:column>
<h:commandButton action="#{hibernateUserHandling.deleteUser(person)}" image="delete.jpg" />
</h:column>
</h:dataTable>
public void deleteUser(User user) {
someUserService.delete(user);
}