이것은 실제로 작동하지 않습니다. 나중에 "여분"매개 변수를 전달할 수 없습니다. 선언 한대로 method-signature
은 복합 구성 요소가 사용 된 측면에서 충족되어야합니다. 예 : 이 원하지 무엇이며, 당신이 정말로의 복합 구성 요소 측면에서 그것을 전달하려는 경우
<my:button action="#{bean.remove('Somestring')}" />
복합 구성 요소의 구현은 다음 내가 할 수있는이
<h:commandButton value="Remove" action="#{cc.attrs.removeFieldAction}" />
과 같아야합니다 추가 인수를 전달하는 두 가지 방법을 생각해보십시오. 을 작업 수신기와 함께 사용하여 attidional 구성 요소 특성으로 전달하거나 <f:setPropertyActionListner>
을 사용하여 JSF가 작업을 호출하기 전에 바로 속성으로 설정하도록 할 수 있습니다. 그러나 둘 다 복합 컴포넌트에 변경 사항이 없습니다. 적어도 전체 bean을 복합 구성 요소의 속성으로 요청해야합니다.
다음은 <f:setPropertyActionListener>
의 예입니다. 이 작업을 호출하기 전에 속성을 설정합니다. 이다
<composite:interface>
<composite:attribute name="bean" type="java.lang.Object" />
<composite:attribute name="action" type="java.lang.String" />
<composite:attribute name="property" type="java.lang.String" />
</composite:interface>
<composite:implementation>
<h:commandButton value="Remove" action="#{cc.attrs.bean[cc.attrs.action]}">
<f:setPropertyActionListener target="#{cc.attrs.bean[cc.attrs.property]}" value="Somestring" />
</h:commandButton>
</composite:implementation>
는 위의 예와
<my:button bean="#{bean}" action="removeFieldAction" property="someString" />
로 사용되는, 빈은 특정 규칙을 준수하는 경우, 당신은 어쩌면을 생략 할 수 있습니다
public class Bean {
private String someString;
public void removeFieldAction() {
System.out.println(someString); // Somestring
// ...
}
// ...
}
과 같아야합니다 property
속성이 모두 있습니다.
Tnx. 복합 요소는 각 필드가 빈의 객체에 링크되어있는 필드 목록을 생성한다는 아이디어입니다. 필드가 UI에서 제거되면 제거 된 필드의 ID를 Bean에 알려야하므로 Bean에서 제거됩니다. 따라서'someString' 매개 변수는 실제로 제거 된 필드의 UUID입니다. 사실, 인수로 이벤트 리스너와 비슷한 것을 얻으려고합니다 ... 해결책 주셔서 감사합니다! – Ben
Hi BalusC. 이 답장을 보내 주셔서 감사합니다. 이것은 Mojarra에서 작동하지만 MyFaces에서는 작동하지 않습니다. 나는 여기에 별개의 문제를 게시했다. 제발 시간 좀 내 주시겠습니까? http://stackoverflow.com/questions/17357593/passed-argument-to-method-inside-composite-component-does-not-work-on-myfaces 대단히 감사합니다. –