2013-09-26 2 views
0

IceFaces를 기반으로하는 응용 프로그램으로 작업하고 있습니다. 이 응용 프로그램의 일부로 사용자는 양식을 선택하고 복제본을 만든 다음이 복제본을 다른 이름으로 편집하고 저장할 수 있습니다. 이 중복에는 두 가지 변형이 있습니다. 하나는 동일한 사본이고, 다른 하나는 수정 된 정보입니다.Icefaces : 오른쪽 클릭을 사용하여 테이블에서 행 선택

양식을 선택하려면 사용자가 정렬 가능한 검색 결과 테이블을 반환하는 검색 페이지가 있어야합니다. 현재 시스템에서 각 행의 마지막 열은 복제본의 각 변형에 대해 하나씩 두 개의 단추가 있습니다. 둘 중 하나를 클릭하면 두 개의 리스너가 트리거됩니다. 선택한 행의 ID로 모델을 업데이트하는 RowSelectionListener와이 ID를 사용하여 선택한 양식을 검색하는 버튼에 따라 두 번째 리스너가 복사되고 복사본이 생성되고 리디렉션됩니다. 사용자를 관련 편집 페이지로 이동시킵니다.

우리는 두 개의 버튼을 하나의 상황에 맞는 메뉴로 바꾸고 싶습니다. 사용자가 행을 마우스 오른쪽 버튼으로 클릭하고 원하는 옵션을 선택할 수 있습니다. contextMenu 구성 요소 (http://icefaces-showcase.icesoft.org/showcase.jsf?grp=aceMenu&exp=contextMenuBean)를 사용하여이 컨텍스트 메뉴를 구현했으며 문제가 하나만 있어도 제대로 작동합니다. 마우스 오른쪽 버튼을 클릭해도 rowSelectionListener가 트리거되지 않습니다. 즉, 사용자는 먼저 편집 할 테이블 항목을 왼쪽 마우스로 클릭 한 다음 마우스 오른쪽 버튼을 클릭하여 메뉴를 볼 수 있어야합니다.

이것은 당연히 매우 직관적 인 작업 방법이 아니기 때문에 행 선택을 마우스 오른쪽 버튼으로 묶거나 마우스 왼쪽 버튼으로 컨텍스트 메뉴를 연결하는 방법이 있는지 궁금합니다. 사용자가 한 번만 클릭하면됩니다.

답변

1

rowSelectionListener는 필요하지 않습니다. contextValuemenuPopup과 함께 사용하면 ice:panelGroup에 의해 생성 된 행에 oncontextmenu를 사용하면됩니다. contextValue은 행을 고유하게 식별하는 데 사용할 수 있습니다.

<ice:column> 
<f:facet name="header"> 
     <h:outputText value="Col header" /> 
</f:facet> 
    <ice:panelGroup contextValue="#{myVar.rowId}" menuPopup="menupopupId"> 
     <ice:outputText value="#{myVar.property}" /> 
    </ice:panelGroup> 
</ice:column> 
.... 
<ui:include src="menuPop.xhtml"/> 

menuPop.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:c="http://java.sun.com/jsp/jstl/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:ice="http://www.icesoft.com/icefaces/component" 
xmlns:ui="http://java.sun.com/jsf/facelets"> 
<ice:panelGroup styleClass="icePnlMenuPopupGrp"> 
    <ice:menuPopup id="menupopupId"> 
     <ice:menuItem id="myItem" value="My Item" 
      actionListener="#{controller.doAction}"> 
     </ice:menuItem> 
     ..... 
    </ice:menuPopup> 
</ice:panelGroup> 
</ui:composition> 
관련 문제