2014-04-30 6 views
0

Primefaces selectManyCheckbox 메뉴에서 값을 선택하고 나중에 데이터베이스에 쓰는 방법에 사용할 속성으로 선택한 값을 설정하려고합니다. 여기 는 컴퍼넌트 .xhtml 페이지의 코드이다Primefaces를 사용하여 값 설정 selectManyCheckbox에서 Java 속성이 작동하지 않음

<p:selectManyCheckbox id="chkbox1" 
        value="#{requestBean.filterTypeBean.selectedBooleanFilterTypes}" 
        layout="pageDirection" converter="filterTypeConverter"> 
        <f:selectItems var="checkbox" 
         value="#{requestBean.filterTypeBean.listBooleanFilterTypes()}" 
         itemLabel="#{checkbox.filterTypeName}" itemValue="#{checkbox}" /> 

      </p:selectManyCheckbox> 

RequestBean 클래스 @ViewScoped되고, 그 안에 난 가지고

private FilterTypeBean filterTypeBean = new FilterTypeBean(); // Plus public get and set method for it 

FilterType 클래스 @SessionScoped되고 그 안에 난 가지고

private List<TFilterType> selectedBooleanFilterTypes; //plus public get and set methods 

public List<TFilterType> listBooleanFilterTypes() { 
      EntityManager em = HibernateUtil.getEntityManager(); 
      Query q = em 
        .createQuery("select u from TFilterType u where u.filterType = 'B'"); 
      List<TFilterType> resultList = q.getResultList(); 
      return resultList; 
     } 

내게는 모든게 괜찮은 것 같지만 selectManyCheckbo에서 일부 값을 선택해도 commandButton을 누르면 selectedBooleanFilterTypes 목록이 비어 있습니다. 엑스. 내가) (getSelectedBooleanFilterTypes를 사용하는 방법을 RequestBean 클래스의 값을 취하려고 :

List<TFilterType> selectedBooleanFilterTypes = filterTypeBean 
       .getSelectedBooleanFilterTypes(); 

setSelectedFilterTypesNames()가 실행되지 않는 것 같습니다. 어떤 제안을하면 문제가 무엇이며 어떻게 수정해야합니까? 미리 감사드립니다!

질문 : 변환기에서 부분 :

public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     // It will create bean when not done yet. 
     FilterTypeBean filterTypeBean = context.getApplication().evaluateExpressionGet(context, "#{filterTypeBean}", FilterTypeBean.class); 

     for (TFilterType type : filterTypeBean.listBooleanFilterTypes()) { 
      if (type.getFilterTypeName().equals(value)) { 
       return type; 
      } 
     } 
     return null; 
    } 
+0

먼저 모든 논리를 'listBooleanFilterTypes' 밖으로 이동하십시오. [getter에서 비즈니스 로직을 수행하지 마십시오.] (http://stackoverflow.com/a/14570012/1530938). 그런 다음 변환이 실패하지 않고 설정 기가 호출되고 있는지 확인하십시오. – kolossus

+0

첫 번째로드에서 SET 메소드가 여전히 실행되지 않으면 오류 양식이 표시됩니다. : 유효성 검증 오류 : 값이 유효하지 않습니다. 페이지를 새로 고침 할 때 setther가 메서드를 설정하고 작동하지만 서버를 다시 시작하고 응용 프로그램을 실행 한 후 매 1 번째로드가 문제가되는 이유를 이해할 수 없습니다. – Tot

+0

이 오류는 속성의 값이 null이기 때문에 변환기에서 발생합니다. 페이지의 첫 번째로드에서 값을 강제로 설정하는 방법은 무엇입니까? 내가 뭔가를 잘 설명하지 못했다면 나에게 부탁해! – Tot

답변

0

이 내 문제를 해결하는 데 도움이 :

@WebFilter("*.jsf") 
public class CharacterEncodingFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws ServletException, IOException { 
     request.setCharacterEncoding("UTF-8"); 
     chain.doFilter(request, response); 
    } 

    @Override 
    public void destroy() { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void init(FilterConfig arg0) throws ServletException { 
     // TODO Auto-generated method stub 

    } 
} 

내가이 UTF-8 form submit in JSF is corrupting data 링크를 따르십시오.