2012-06-24 2 views
1

나는 다음과 같은 JSF보기 index.xhtml 있습니다경고 : /index.xhtml 22110 대상 = "# {menuTab.action}"@ 형 com.menu.MenuTab에 쓰기 오류 '액션'

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:c="http://java.sun.com/jsp/jstl/core"> 
<ui:composition template="template.xhtml"> 
    <ui:define name="top"> 
     Menu 
    </ui:define> 
    <ui:define name="content"> 
     <h:form> 
      <p:menubar> 
       <p:submenu label="Admin"> 
        <p:submenu label="User"> 
         <p:menuitem value="Add User" ajax="true"> 
          <f:setPropertyActionListener target="#{menuTab.action}" value="StudentAdd"/> 
         </p:menuitem> 
         <p:menuitem value="Edit User" ajax="true"> 
          <f:setPropertyActionListener target="#{menuTab.action}" value="StudentEdit"/> 
         </p:menuitem> 
        </p:submenu> 
       </p:submenu> 
      </p:menubar> 
     </h:form> 
     <p:tabView> 
      <c:forEach items="#{menuTab.listOfObjs}" var="item" varStatus="loop"> 
       <p:tab title="#{menuTab.value}" closable="true"/> 
     </c:forEach> 
    </p:tabView> 
    </ui:define> 
</ui:composition> 

그리고 다음과 같은 관리 빈 MenuTab.java

package com.menu; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 


@ManagedBean(name="menuTab") 
@SessionScoped 
public class MenuTab implements Serializable { 

/** Creates a new instance of MenuTest */ 
public MenuTab() { 
} 
private String action; 
private String value; 
private List<String> listOfObjs = new ArrayList(); 

public String getAction() { 
    return action; 
} 

public void setAction(String action) { 
    this.action = action; 
    addValue(action); 
} 
//-------------------------------------- 

public void addValue(String act) { 
    if (listOfObjs.isEmpty()) { 
     setValue(act); 
     getListOfObjs().add(getValue()); 
     System.out.println("First Data add First Data add First Data add::::::::::::::::" + value); 
    } 
    Iterator idvalu = listOfObjs.iterator(); 
    while (idvalu.hasNext()) { 
     System.out.println("aaaaaaaaaaa=====" + idvalu.next()); 

     value=act; 

     if (idvalu.next().equals(value)) { 
      System.out.println("Data Alrady Exite Data =====" + value); 
     } 
     else { 
      setValue(act); 
      getListOfObjs().add(getValue()); 
      System.out.println("bbbbbbbbbbbbbbb=====" + value); 
     } 

    } 

} 

/** 
* @return the listOfObjs 
*/ 
public List<String> getListOfObjs() { 
    return listOfObjs; 
} 

/** 
* @param listOfObjs the listOfObjs to set 
*/ 
public void setListOfObjs(List<String> listOfObjs) { 
    this.listOfObjs = listOfObjs; 
} 

/** 
* @return the value 
*/ 
public String getValue() { 
    return value; 
} 

/** 
* @param value the value to set 
*/ 
public void setValue(String value) { 
    this.value = value; 
} 

}

것은 내가 클릭 사용자 메뉴 추가, 바람둥이이 마사지를 보여

aaaaaaaaaaa=====StudentAdd 
Jun 24, 2012 3:30:04 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute 
WARNING: /index.xhtml @22,110 target="#{menuTab.action}": Error writing 'action' on type com.menu.MenuTab 
javax.el.ELException: /index.xhtml @22,110 target="#{menuTab.action}": Error writing 'action' on type com.menu.MenuTab 
    at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:139) 
    at com.sun.faces.facelets.tag.jsf.core.SetPropertyActionListenerHandler$SetPropertyListener.processAction(SetPropertyActionListenerHandler.java:206) 

답변

0

javax.el.ELException : /index.xhtml를 22,110 대상 = "# {menuTab.action}"@ : 쓰기 오류 '조치를'형 COM에. menu.MenuTab

즉, #{menuTab.action} 뒤에있는 setter 메서드가 예외를 throw했습니다. 해당 예외에 대한 스택 트레이스를 자세히 살펴본 다음 예외에 제공된 정보를 기반으로 코드를 수정하십시오.

setAction() 코드를 간략하게 살펴보면 Iterator#next()을 루프 내부에서 두 번 호출하기 때문에 가장 가능성이 높은 원인은 NoSuchElementException입니다. next()이 호출 될 때마다 다음 요소로 이동합니다. 예상했던 것처럼 "현재"요소를 반환하지 않습니다.

다음 줄 제거 :

System.out.println("aaaaaaaaaaa=====" + idvalu.next()); 

또는 적어도 변수

String next = idvalu.next(); 
System.out.println("aaaaaaaaaaa=====" + next); 

if (next.equals(value)) { 
    // ... 
에 할당