在JSF中动态修改动作方法值



我有一个按钮,它必须执行/调用任何两个独立的后台bean操作方法onclick。在我的表单中有一个可用的参数

是否可以使用java脚本根据条件(如document.getElementById("buttonId").action = 'sameBean.newActionMethod')动态修改action=""的值?

但是这样做会导致像action方法这样的异常,这在后台bean中是不可用的。

动作方法没有在HTML DOM树中定义。在浏览器中右键单击页面并执行查看源。如果你懂基本的HTML,你就会看到它。

让它提交给一个操作方法,该操作方法根据提交的数据进一步委托给所需的方法。例如

public void submit() {
    if (...) {
        doX();
    } else if (...) {
        doY();
    } else {
        doZ();
    }
}

JS可以用来操作隐藏的输入字段。你可以在action方法中截取它

您不能通过JavaScript从客户端访问JSF标记的属性,因为它完全位于服务器端。但是你可以区分不同的操作方法,或者在操作方法本身中,或者通过在两个命令按钮中分离业务关注点。

两个用于执行业务任务的命令按钮

告知用户他将执行一个业务任务或另一个业务任务是很好的。使用这种方法,您可以通过AJAX根据某些条件呈现可用的操作集。

<h:form>
    <h:...>
        <f:ajax render="button-div" listener="#{bean.listener}" />
    </h:...>
    <h:panelGroup id="button-div" layout="block">
        <h:commandButton value="First job" action="#{bean.first}" rendered="#{bean.firstShown}" />
        <h:commandButton value="Second job" action="#{bean.second}" rendered="#{bean.secondShown}" />
    </h:panelGroup>
</h:form>

一个命令按钮执行多个业务任务

使用这种方法,您只有一个按钮,实际操作由服务器根据某些条件决定。此条件必须通过<h:...>标记显式地或在隐藏字段的帮助下处理给服务器。

<h:form>
    <h:... value="#{bean.condition}">
    <h:commandButton value="Do some job" action="#{bean.action}" />
</h:form>

private String condition;
public void action() {
    if("first".equals(condition)) {
        first();
    } else if("second".equals(condition)) {
        second();
    } else {
        default();
    }
}

最新更新