我在backing bean中有一个方法,它将Question对象作为参数。我想将datatable中的question变量作为参数传递给用户单击按钮/链接时调用的方法。但是,当我尝试#{bean.deleteQuestion(question)}
时,我只会在EL中出错?我该怎么办?
<p:dataTable value="#{bean.questions}" var="question"
id="questionTable" paginator="true" rows="15"
paginatorTemplate="{CurrentPageReport} {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="15,25,50" paginatorPosition="bottom">
<p:column sortBy="#{question.id}">
<f:facet name="header">ID</f:facet>
<h:outputText value="#{question.id}" />
</p:column>
<p:column sortBy="#{question.description}">
<f:facet name="header">Description</f:facet>
<h:outputText value="#{question.description}" />
</p:column>
<p:column>
<f:facet name="header">Operations</f:facet>
<h:link value="Show" outcome="pretty:showQuestion">
<f:param name="id" value="#{question.id}" />
</h:link>
|
<h:link value="Edit" outcome="pretty:editQuestion">
<f:param name="id" value="#{question.id}" />
</h:link>
|
// HERE I WANT A DELETE LINK/BUTTON !
</p:confirmDialog>
</p:column>
</p:dataTable>
答案 0 :(得分:0)
但是,当我尝试
#{bean.deleteQuestion(question)}
时,我只会在EL中遇到错误
遗憾的是,您没有分享有关“EL错误”的详细信息以及您尝试的代码(在未来的问题中,您应该这样做)。
我认为你试过
<h:commandLink value="Delete" action="#{bean.deleteQuestion(question)}" />
并且实际上你的IDE错误地显示了警告/错误,并且你无论如何都没有尝试运行它。根据您的问题历史记录,您正在使用Glassfish 3,EL上的传递方法参数应该可以正常工作。如果确实是你的IDE在那条线上猛拉,那么无论如何都要运行它。如果确实可以正常工作,请重新配置IDE的验证设置或安装更好的JSF / EL插件。
或者如果你在运行时实际得到ELException
,那么它只能意味着你的web.xml
被声明符合Servlet 2.5而不是Servlet 3.0。仅在EL 2.2中支持传递方法参数,因为EL 2.2是JSP 2.2 / Servlet 3.0的一部分。
请注意,命令链接应具有<h:form>
父级。确保你有一个;你可以把它放在<h:commandLink>
或<p:dataTable>
附近。另外,请确保#{bean}
正确保留表单提交请求的questions
。最简单的是将它放在视图范围内。