f:有条件的param

时间:2012-05-04 17:29:33

标签: java jsf

我有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)

1 个答案:

答案 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}" />

升级是最佳选择。你不想坐在史前的图书馆里。