2013-05-15 2 views
0

안녕하세요 저는 Liferay SKD for Java와 Liferay 6.1 (Tomcat)을 사용하고 있습니다. Service.xml를 사용liferay 컬렉션을 사용하는 방법

<entity name="PCustomer" local-service="true" remote-service="false"> 

    <!-- PK fields --> 
    <column name="customerId"   type="int" primary="true" /> 
    <!-- Audit fields --> 
    <column name="name"     type="String"/> 
    <column name="vAddress"    type="String"/> 
    <column name="pAddress"    type="String"/> 
    <column name="comments"    type="String"/> 
    <column name="pusers"    type="Collection"  entity="PUser"  mapping-key="userId"/> 
    <column name="pcontacts"   type="Collection"  entity="PContact" mapping-key="contactId"/> 
    <column name="pdemos"    type="Collection"  entity="PUserDemo" mapping-key="demoId"/> 
    <column name="plicenses"   type="Collection"  entity="PLicense" mapping-key="licenseId"/> 
    <column name="pfolders"    type="Collection"  entity="PFolder" mapping-key="folderId"/> 

</entity> 

지금은 특정 고객과 관련된 내 모든 연락처를 검색하려면 다음과 같이 나는 사용자 지정 데이터베이스를 만들었습니다. 문제는 그 내 JSP 페이지에서이 작업을 수행 할 때 :

<% 
    String user = request.getRemoteUser(); 
    int userId = Integer.valueOf(user); 
    PUser pUser=PUserLocalServiceUtil.getPUser(userId); 
    int customerId = pUser.getCustomerId(); 

    PCustomer customer=PCustomerLocalServiceUtil.getPCustomer(customerId); 

    java.util.List<PContact> contCus=PCustomerUtil.getPContacts(customerId); 
%> 

그리고 각 루프에 사용이 목록을 여물 이동하려고 :

java.lang.ClassCastException: $Proxy288 cannot be cast to com.myportlet.service.persistence.PCustomerPersistence

:

%for (PContact pContact : contCus) 
    if(pContact.getUserType().equals("billing")) 
    {%> DO SOMETHING <% } %> 

그것은 나에게 오류를 제공

디버깅을했는데 JSP 페이지에서 목록을 만들 때까지 모든 값이 정상적으로 작동합니다. 문제는 페이지에서 내가 그런 목록을 만들어야한다는 것을 보여주고 있다는 것입니다. 이 매개 변수 사용 등. 그것은 나에게 어떤 오류도주지 않는다.

누군가 나를 도울 수 있습니까? 아니면 내가 뭘 잘못하고 있다고 말해 줄 수 있습니까?

도움이 될 것입니다. 미리 감사드립니다 !!!!

+0

왜 스크립틀릿입니까? 어떤 종류의 자습서를 사용하여 배우고 있습니까? = \ –

답변

0

... 스프링 관리 빈 (bean)을 당신의 코드 어딘가의 구체적인 클래스에 관리합니다. 문제는 Spring AOP가 프록시를 사용하여 bean을 감싸는 것이고,이 상황에서 여러분이 가정 할 수있는 유일한 점은 프록시가 원래 클래스와 동일한 인터페이스 세트를 구현한다는 것입니다. 이상한 점은 서비스 작성기를 사용하여 서비스를 생성 할 때 PCustomerPersistence는 이미 클래스가 아니라 인터페이스 여야한다는 것입니다.

Btw를 사용하면 서비스 외부에서 PCustomerUtil (또는 서비스 작성자가 생성 한 다른 엔터티에 해당하는 클래스)을 호출하면 안됩니다. 이러한 클래스는 퍼시스턴스 계층에서 직접 메서드를 노출하므로 JSP 또는 포틀릿이 아닌 서비스에서만 호출해야합니다.

1

봅니다 JSTL에게 C 사용 : 대해 forEach를 태그 : 당신이 캐스팅하려고하는 것 같다

나는이 자바 컬렉션이나 반복과는 아무 상관이 없다고 생각

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<% pageContext.setAttribute("contCus", contCus); %> 

<c:forEach var="pContact" items="${contCus}"> 
    <c:out value="${pContact.userType}"/> 
</c:forEach>  
관련 문제