2012-10-19 32 views
3

我正在驗證我的表單,並且我可以獲取文本框的值,但始終檢索空值 uiClass變量(Error: java.lang.NullPointerException): 任何建議?我如何驗證selectOneMenu的值?

例外:

WARNING: /jsf/report/Edit.xhtml @39,99 listener="#{studentController.validate}": java.lang.NullPointerException 
javax.el.ELException: /jsf/report/Edit.xhtml @39,99 listener="#{studentController.validate}": java.lang.NullPointerException 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111) 
    at com.sun.faces.facelets.tag.jsf.core.DeclarativeSystemEventListener.processEvent(EventHandler.java:131) 
    at javax.faces.component.UIComponent$ComponentSystemEventListenerAdapter.processEvent(UIComponent.java:2464) 
    at javax.faces.event.SystemEvent.processListener(SystemEvent.java:106) 
    at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2168) 
    at com.sun.faces.application.ApplicationImpl.invokeComponentListenersFor(ApplicationImpl.java:2116) 
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:288) 
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:246) 

Caused by: java.lang.NullPointerException 
    at entities.StudentController.validate(StudentController.java:163) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 

@ManagedBean() 
@SessionScoped 
public class StudentController implements Serializable { 
    public void validate(ComponentSystemEvent event) { 
     FacesContext fc = FacesContext.getCurrentInstance(); 
     UIComponent components = event.getComponent(); 

     UIInput uiName = (UIInput) components.findComponent("frmStudent:name"); 
     UIInput uiClass = (UIInput) components.findComponent("frmStudent:myclass"); 

     String name = uiName.getLocalValue().toString(); 
     String myclass = uiClass.getLocalValue().toString(); 

     if (name.equals("") || name == null || name.isEmpty()) { 
      FacesMessage msgName = new FacesMessage("Please enter name !"); 
      fc.addMessage(components.getClientId(), msgName); 
      fc.renderResponse(); 
     } else if (myclass.equals("") || myclass == null || myclass.isEmpty()) { 
      FacesMessage msgClass = new FacesMessage("Please select a class !"); 
      fc.addMessage(components.getClientId(), msgClass); 
      fc.renderResponse(); 
     } 
    } 
} 

我XHTML

<h:message for="textPanel" style="color:red;" /> 
<h:panelGrid id="textPanel" columns="4"> 
    <f:event listener="#{studentController.validate}" type="postValidate" /> 
    <h:inputText id="name" value="#{studentController.selected.name}" size="20" /> 
    <h:selectOneMenu id="myclass" value="#{studentController.selected.myclass}" style="width:180px;"> 
     <f:selectItem itemLabel="Select ..." itemValue="#{null}" noSelectionOption="true" /> 
     <f:selectItems value="#{studentController.classItems}"/> 
    </h:selectOneMenu> 
</h:panelGrid> 
+0

請發佈你的異常棧跟蹤,除此之外,你應該改變'name.equals(「」)|| name == null'用於'name == null ||' name.equals(「」)',因爲如果名稱爲'null',它將導致NPE – higuaro

+0

我使用名稱進行測試,因此除selectOneMenu的值外,其他都是OK。是的,我現在會發布例外 – Bryan

回答

7

你爲什麼不使用所需的屬性?

<h:inputText id="name" required="true" requiredMessage="Please enter name !" value="#{studentController.selected.name}" size="20" /> 
    <h:selectOneMenu id="myclass" required="true" requiredMessage="Please select a class !" value="#{studentController.selected.myclass}" style="width:180px;"> 
     <f:selectItem itemLabel="Select ..." itemValue="#{null}" noSelectionOption="true" /> 
     <f:selectItems value="#{studentController.classItems}"/> 
    </h:selectOneMenu> 
相關問題