2

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 表达式中使用车削运算符。

<f:param name="insuranceID" value="#{selectedMedicationInfoBean.insurance.id=null?'':selectedMedicationInfoBean.insurance.id}">

还有其他方法吗?


功能需求:在page1上有一个链接detail。这将在 page2 上显示详细信息。作为参数需要传递大约 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)
4

1 回答 1

2

该异常是由一个旧的 Mojarra 1.2 错误引起的,当<f:param>值为null. 它已在 Mojarra 1.2_05 中修复(或者可能是之前或之后的一个版本,不确定了,已经超过 6 年了)。只需升级到目前已经在1.2_15的最新 Mojarra 1.2 。

另一种方法是将它包装在 a 中,但这很丑陋,并且如果被声明为某个父组件的 the<c:if>也将不起作用。selectedMedicationInfoBeanvarUIData

<c:if test="${not empty selectedMedicationInfoBean.insurance.id}">
    <f:param name="insuranceID" value="#{selectedMedicationInfoBean.insurance.id}" />
</c:if>

另一种选择是指定默认值0or-1并在控制器中进行相应处理。

<f:param name="insuranceID" value="#{not empty selectedMedicationInfoBean.insurance.id ? selectedMedicationInfoBean.insurance.id : -1}" />

升级是最好的选择。你不想和史前图书馆坐在一起。

于 2012-05-04T17:51:42.393 回答