2015-10-14 47 views
0

我有它運行在Wildfly9完全正常的Web應用程序,但給我的Websphere8頭疼:阿賈克斯selectOneMenu用於產生NullPointerException異常

<h:form id="productsForm"> 
    <p:selectOneMenu id="productSelector" 
     value="#{productManager.productName}" style="width: 100%;"> 
     <f:selectItem value="#{null}" /> 
     <f:selectItems value="#{productManager.products}" 
      var="product" itemLabel="#{product.productName}" 
      itemValue="#{product.productName}" /> 
     <p:ajax event="change" update="editProductButton" /> 
    </p:selectOneMenu> 
    <p:button id="editProductButton" 
     value="Edit Product" outcome="/pages/products/productDetails" 
     style="float: left; margin-left: 10px;" disabled="#{productManager.productName == null}"> 
     <f:param name="productName" 
      value="#{productManager.productName}" /> 
    </p:button> 
</h:form> 

Java方面:

private String productName; 
private List<Product> products; 


public String getProductName() { 
    return this.productName; 
} 

public void setProductName(String productName) { 
    this.productName = productName; 
} 
public List<Product> getProducts() { 
    if(null == this.products){ 
     this.products = this.productService.findAll(); 
    } 
    return this.products; 
} 

如果一個項目selectOneMenu被選中,我想要啓用「編輯」按鈕。在Wildfly一切都很好,在WebSphere以下異常發生時,我選擇一個項目:

com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0014E: Uncaught service() exception root cause Faces Servlet: javax.servlet.ServletException 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:221) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774) 
[...] 
Caused by: java.lang.NullPointerException 
     at javax.faces.component._SelectItemsIterator.hasNext(_SelectItemsIterator.java:124) 
     at javax.faces.component._SelectItemsUtil.matchValue(_SelectItemsUtil.java:48) 
     at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:77) 
     at org.primefaces.component.selectonemenu.SelectOneMenu.validateValue(SelectOneMenu.java:282) 
     at javax.faces.component.UIInput.validate(UIInput.java:583) 
     at javax.faces.component.UIInput.processValidators(UIInput.java:247) 
     at org.apache.myfaces.context.servlet.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:533) 
     at org.apache.myfaces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:207) 
     at javax.faces.component.UIComponent.visitTree(UIComponent.java:773) 
     at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1007) 
     at javax.faces.component.UIForm.visitTree(UIForm.java:269) 
     at javax.faces.component.UIComponent.visitTree(UIComponent.java:793) 
     at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1007) 
     at javax.faces.component.UIComponent.visitTree(UIComponent.java:793) 
     at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1007) 
     at org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartialExecute(PartialViewContextImpl.java:362) 
     at org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:342) 
     at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60) 
     at javax.faces.component.UIViewRoot$ProcessValidatorPhaseProcessor.process(UIViewRoot.java:1394) 
     at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1282) 
     at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:758) 
     at org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:34) 
     at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171) 
     at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189) 
     ... 33 more 

任何想法,爲什麼這種情況正在發生或該如何修復/解決方法嗎?

回答

1

WebSphere使用MyFaces作爲JSF實現,Wildfly使用Mojorra。這就是爲什麼你有不同的結果。

您已將空值定義爲selectItem。這打破了代碼。改爲使用空字符串。或者另一個解決方案是更改JSF實現。

另外考慮你的開發環境應該儘可能的接近生產/最終的開發環境。

+1

其實兩者都是測試環境,但那是另一回事。使用「」爲我做了訣竅。 – Nitek

+1

''?我覺得它有點乾淨。 –