我在JSF页面中有这段代码:
<a href="#adios" data-toggle="modal">
<h:commandButton value="Pay!" action="#{basketManager.pay(accountManager.currentAccount.username)}"
class="btn btn-primary btn-lg"></h:commandButton>
</a>
显示模态,但action
未执行...如何同时执行这两个操作(显示模态并调用方法)?
答案 0 :(得分:1)
如果要在提交表单时执行脚本,可以在commandButton标记内使用onclick="alert('Clicked submit button!');"
事件。
执行这两个操作的方法之一是在bean中使用@ManagedProperty
注释。
例如,将您的sumbit改为此
<h:form>
<h:commandButton value="Pay!" action="#{basketManager.pay()}"
class="btn btn-primary btn-lg" onclick="alert('Clicked submit button!');" />
</h:form>
然后你的Bean可能会更像这样:
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name = "basketManager")
@RequestScoped
public class BasketManager implements Serializable {
@ManagedProperty(value="#{accountManager}")
private AccountManager accountManager;
//this is nessesery!
public void setAccountManager(AccountManager accountManager) {
this.accountManager = accountManager;
}
public String pay() {
if(accountManager != null) {
//... do something using accountManager.currentAccount.username
}
return ""; // your action result
}
}
您必须记住,BasketManager bean必须与AccountManager bean相同或更小。例如,如果AccountManager为@SessionScoped
,那么BasketManager可以是@SessionScoped
或@ViewScoped
或@RequestScoper
。那不能是@ApplicationScoped
!
答案 1 :(得分:1)
<h:form>
<p:remoteCommand name="callAction" onstart="Place your javascript code to show the model"
action="#{basketManager.pay(accountManager.currentAccount.username)}"
update="@form" />
<h:commandButton value="Pay!" class="btn btn-primary btn-lg"
onclick="callAction();" />
</h:form>
这里你可以在javascript函数上调用ManagedBean方法。 当remote-command启动它时,它会显示模型,甚至调用action方法
希望这有助于你