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

时间:2013-05-17 07:48:51

标签: javascript jsf action

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

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

但这样做会导致像action方法一样的异常在辅助bean中不可用。

2 个答案:

答案 0 :(得分:1)

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

让它提交给一个动作方法,然后根据提交的数据进一步委托所需的方法。 E.g。

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

JS可用于操纵隐藏的输入字段。你可以在动作方法中拦截它。

答案 1 :(得分:0)

您无法通过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();
    }
}