在 Action 中传递 UIComponent 的 MethodExpression

bud*_*eru 2 uicomponents primefaces jsf-2

是否有可能在 action 的 MethodExpression 中传递 UIComponent?

xHTML

<p:menuitem id="test" value="Test" action="#{controller.test(this)}" update="test" />
Run Code Online (Sandbox Code Playgroud)

爪哇

public String test(MenuItem item) {
    // Do something with item
    return null;
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 5

您可以#{component}为此使用隐式 EL 变量:

<p:menuitem ... action="#{controller.test(component)}" />
Run Code Online (Sandbox Code Playgroud)

public void test(UIComponent component) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您只对例如id属性感兴趣:

<p:menuitem ... action="#{controller.test(component.id)}" />
Run Code Online (Sandbox Code Playgroud)

public void test(String id) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您也可以UIComponent#getCurrentComponent()为此使用:

<p:menuitem ... action="#{controller.test}" />
Run Code Online (Sandbox Code Playgroud)

public void test() {
    UIComponent component = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());
    // ...
}
Run Code Online (Sandbox Code Playgroud)