2011-12-25 3 views
10

직접적 먼저 빈의 속성을 설정하기 위해 필요로하는 대신 뷰에서 그들에게 매개 변수를 전달 콩 방법 &를 호출하고있는 명령 또는 유사한을 사용하여 인수없이 메소드를 호출 할 수 있습니까?호출 콩 방법

각 목록에 작업 목록이있는 항목 목록이 있습니다. 상태를 줄이기 위해, commandButton (s) 대신에 단일 프라임모스 remoteCommand을 사용하고 있습니다. 보기에서 작업 트리거를 얻으려면 자바 스크립트에서 remoteCommand을 호출하지만 remoteCommand은 하나이지만 여러 항목에 사용되므로 항목의 ID도 전달해야합니다. 빈 속성으로 먼저 설정하는 대신 인수로 직접 콩 메서드에 항목의 ID를 전달할 수있는 방법이 있는지 궁금합니다. 그렇게 할 방법이 있습니까?

실제로는 페이지에 긴 항목 목록이있을 때 페이지에서 여러 개의 commandButton을 처리하는 더 좋은 방법을 찾고 있습니다.

제안 사항? 감사. JSF 2.1.6 사용


인 Mojarra Primefaces 방법 인수 전달 3.0RC1

답변

18

와 서블릿 3.0 2.2 EL 부분 때문에지지된다. 따라서 웹 애플리케이션이 web.xml으로 선언 된 Servlet 3.0 호환 컨테이너 (Tomcat 7, Glassfish 3 등)에서 실행되는 경우 서블릿 3.0 스펙 (서블릿 3.0을 암시 적으로 필요로하는 JSF 2.1을 사용할 때 그렇다) 당신은 심지어 같은 함께 fullworthy 개체를 전달할 수 있습니다

<h:commandButton value="Submit" action="#{bean.submit(item.id)}" /> 

public void submit(Long id) { 
    // ... 
} 

과 : 다음과 같은 형태로 콩 액션 메소드에 메소드 인수를 전달 할 수있을 것입니다

<h:commandButton value="Submit" action="#{bean.submit(item)}" /> 
만약 2.5 서블릿 컨테이너 타겟팅 된 경우

public void submit(Item item) { 
    // ... 
} 

와 51,515,

후 동일한 구문을 지원하는 예를 보스에 대한 EL하여 EL 구현 대체하여 동일한 얻을 수있다. Invoke direct methods or methods with arguments/variables/parameters in EL을 참조하십시오.

+0

태그 또는 구성 요소 내부에서도 가능합니까?bean을 컴포넌트/태그에 전달할 때 bean을 보유하는 속성에 대한 메소드를 호출한다. 'action = "# {myBean [ 'actionToCall']}"'. 내 머리 꼭대기에서'f : setPropertyActionListener'를 설정하는 것 이외에 괄호 구문으로 매개 변수를 전달하는 방법을 알지 못했을 것입니다.이 경우에는 괄호가 필요합니다. 맞습니까? – Louise

+1

@ 루이스 :'action = "# {myBean [ 'actionToCall'] (someParam)}"'을 사용하십시오. 이 구문은 오래된 Tomcat 및 Glassfish 버전에서 버그가 있음에 유의하십시오. Tomcat 7.0.22 및 Glassfish 3.1.2 이후에만 제대로 작동합니다. – BalusC

+0

"item"(또는 "item.id")의 출처는 어디입니까? 그것은 p : tabView (primefaces)에서 선택한 p : tab의 ID와 같은 것이 될 수 있습니까? –

7

당신은이 같은 인수 ManagedBean은 메서드를 호출 할 수 있습니다 참조하십시오.

<h:commandButton actionListener="#{stateBean.delete(row.stateID)}" 
value="Delete" id="btnDeleteS"> 

    <f:ajax event="action" execute="@form" render="@form"/> 
</h:commandButton> 

해당 ManagedBean은 다음과 같습니다.

@ManagedBean 
@RequestScoped 
public class StateBean 
{ 
    @EJB 
    private RemoteInterface obj=null; 

    public void delete(String stateID) 
    { 
     //Code stuff here. 
    } 
} 

또한 직접이 같은 <f:setPropertyActionListener></f:setPropertyActionListener>를 사용 ManagedBean은 속성의 값을 설정할 수 있습니다.

<h:commandButton value="Delete" id="btnDeleteS"> 

    <f:setPropertyActionListener target="#{stateBean.someProperty}" 
     value="#{someValue}"/> 
    <f:ajax event="action" execute="@form" render="@form"/> 
</h:commandButton> 
+2

+1 thee propertyActionListener가 나에게 가장 좋은 방법입니다. – jpganz18