(포틀릿 개발 독서 노트) 포틀릿 인터랙티브 - 포틀릿 이벤트 사용
(나는 감탄: 역시 사건 구동의 사상이 사람들의 마음속에 깊이 파고들고 어디에도 없구나. 이미 무수한 곳에서 사건 구동의 강력한 능력을 보았구나)
단계1: 먼저 이벤트클래스를 정의합니다. 이 클래스는 Serializable 인터페이스를 실현해야 합니다. 원격 포틀릿 용기 안의 포틀릿에 의해 받아들여질 수 있기 때문에 네트워크에서 전송해야 하기 때문에 서열화되어야 합니다. 서열화된 방식은 JAXB로 이를 XML 문서로 전환한 다음에 네트워크에서 전송하는 것입니다.
이 @XmlRootElement은 이 이벤트가 포틀릿 용기에 xml 형식으로 발표될 것을 표시합니다
- import chapter11.code.listing.domain.Book;
- import javax.xml.bind.annotation.XmlRootElement;
- @XmlRootElement
- public class BookAddedEvent implements Serializable
- private static final long serialVersionUID = ...
- private String name;
- private String author;
- private Long isbnNumber;
- private String category;
- public BookAddedEvent() {
- //-- do nothing
- }
- public BookAddedEvent(Book book) {
- this.name = book.getName();
- this.author = book.getAuthor();
- this.category = book.getCategory();
- this.isbnNumber = book.getIsbnNumber();
- }
- ...
- }
그런 다음 이 Book에 추가된 이벤트는 다음과 같은 XML 서열화된 문서로 변경되어 네트워크에 전송됩니다.
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <bookAddedEvent>
- <author>Ramnivas Laddad</author>
- <category>Java</category>
- <isbnNumber>1933988053</isbnNumber>
- <name>AspectJ in Action, Second Edition</name>
- </bookAddedEvent>
2단계 2: 보낸 사람 포틀릿의 방법에 이벤트 객체를 추가합니다.
- public class BookCatalogPortlet extends GenericPortlet {
- @ProcessAction(name = "addBookAction")
- public void addBook(...)... {
- ...
- Book book = new Book(category, name, author, Long
- .valueOf(isbnNumber));
- // bookService addBook
- bookService.addBook(book);
- // , QualifiedName ( )
- QName eventName = new QName(
- "http://www.mynamespace.com", "bookAddedEvent"
- );
- // response , Event Event QName
- response.setEvent(eventName, new BookAddedEvent(book);
- ...
- }
3단계:portlet.xml의
- <portlet-app...>
- <portlet>
- <portlet-name>bookCatalog</portlet-name>
- <portlet-class>
- chapter11.code.listing.base.BookCatalogPortlet
- </portlet-class>
- ...
- <supported-publishing-event>
- <qname xmlns:n="http://www.mynamespace.com">
- n:bookAddedEvent</qname>
- </supported-publishing-event>
- </portlet>
- <event-definition>
- <qname xmlns:n="http://www.mynamespace.com">
- n:bookAddedEvent</qname>
- <value-type>chapter11.code.listing.base.
- BookAddedEvent</value-type>
- </event-definition>
- ...
- </portlet-app>
단계 4;수신자 포틀릿에서 이벤트에서 필요한 내용을 코드로 표시하고 처리합니다.
- public class RecentlyAddedBookPortlet extends GenericPortlet ...
-
- @ProcessEvent(qname=
-
- "{http://www.mynamespace.com}bookAddedEvent")
-
- public void processAddedBookEvent(EventRequest
-
- request, EventResponse eventResponse) throws...{
-
- Event event = request.getEvent();
-
- BookAddedEvent bookAddedEvent =
-
- (BookAddedEvent)event.getValue();
-
- eventResponse.setRenderParameter("category",
-
- bookAddedEvent.getCategory());
-
- eventResponse.setRenderParameter("name",
-
- bookAddedEvent.getName());
-
- eventResponse.setRenderParameter("author",
-
- bookAddedEvent.getAuthor());
-
- eventResponse.setRenderParameter("isbnNumber",
-
- String.valueOf(bookAddedEvent.getIsbnNumber()));
-
- }
-
- }
5단계: 수신자 포틀릿의portlet.xml에서 이 포틀릿이 처리할 수 있는 이벤트를 정의합니다
- <portlet-app...>
- <portlet>
- <portlet-name>recentBook</portlet-name>
- <portlet-class>
- chapter11.code.listing.base.RecentlyAddedBookPortlet
- </portlet-class>
- ...
-
- <supported-processing-event>
- <qname xmlns:n="http://www.mynamespace.com">
- n:bookAddedEvent</qname>
- </supported-processing-event>
- </portlet>
- <event-definition>
- <qname xmlns:n="http://www.mynamespace.com">
- n:bookAddedEvent</qname>
- <value-type>chapter11.code.listing.base.
- BookAddedEvent</value-type>
- </event-definition>
- ...
- </portlet-app>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
앱에서 KSP 출력 사용: 4부이제 생성된 클래스가 있으므로 코드에서 사용해 보겠습니다. Checkout other parts in this series: Android KSP guide for dummies by a Dummy: Part 1 (...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.