我有f:param
如下...
<f:param name="NDCID" value="#{selectedMedicationInfoBean.NDCID}"></f:param>
<f:param name="insuranceID" value="#{selectedMedicationInfoBean.insurance.id}"></f:param>
在少数情况下
#{selectedMedicationInfoBean.insurance.id}
为空。我们能预防吗?我不能在JSF Expression中使用turnery操作符。
<f:param name="insuranceID" value="#{selectedMedicationInfoBean.insurance.id=null?'':selectedMedicationInfoBean.insurance.id}">
还有其他办法吗?
功能要求:在第1页上有一个detail
的链接。这将显示第2页的详细信息。因为参数需要传递6个参数。在这些参数的基础上,详细页面将生成信息。
问题是来自这6个参数2可以为空,并且导致以下错误的信息来自page1
。
java.lang.NullPointerException
com.sun.faces.renderkit.RenderKitUtils.getCommandLinkOnClickScript(RenderKitUtils.java:934)
com.sun.faces.renderkit.html_basic.CommandLinkRenderer.getOnClickScript(CommandLinkRenderer.java:295)
com.sun.faces.renderkit.html_basic.CommandLinkRenderer.renderAsActive(CommandLinkRenderer.java:357)
com.sun.faces.renderkit.html_basic.CommandLinkRenderer.encodeBegin(CommandLinkRenderer.java:165)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)
org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:433)
org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:419)
org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:440)
答案 0 :(得分:2)
该异常是由一个旧的Mojarra 1.2错误引起的,当<f:param>
值为null
时,它确实会出现。它已在Mojarra 1.2_05中修复(或者可能是之前或之后的一个版本,不再确定,它已经超过6年前了)。只需升级到最新的Mojarra 1.2,目前已经在1.2_15。
另一种方法是将其包装在<c:if>
中,但这很简单,如果selectedMedicationInfoBean
被声明为某个父var
UIData
,那么也无效} component。
<c:if test="${not empty selectedMedicationInfoBean.insurance.id}">
<f:param name="insuranceID" value="#{selectedMedicationInfoBean.insurance.id}" />
</c:if>
另一种方法是指定默认值0
或-1
,并在控制器中进行相应处理。
<f:param name="insuranceID" value="#{not empty selectedMedicationInfoBean.insurance.id ? selectedMedicationInfoBean.insurance.id : -1}" />
升级是最佳选择。你不想坐在史前的图书馆里。