我有一个按钮,它必须执行/调用两个单独的支持 bean 操作方法 onclick 中的任何一个。我的表单中有一个可用的参数。
action=""
是否可以使用基于条件的 java 脚本即时修改值,例如document.getElementById("buttonId").action = 'sameBean.newActionMethod'
?
但是这样做会导致像 action 方法这样的异常在 backing bean 中不可用。
我有一个按钮,它必须执行/调用两个单独的支持 bean 操作方法 onclick 中的任何一个。我的表单中有一个可用的参数。
action=""
是否可以使用基于条件的 java 脚本即时修改值,例如document.getElementById("buttonId").action = 'sameBean.newActionMethod'
?
但是这样做会导致像 action 方法这样的异常在 backing bean 中不可用。
在 HTML DOM 树中没有定义 action 方法。在浏览器中右键单击页面并执行View Source。如果您了解基本的 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();
}
}