BootsFaces ajax inputtext 上的事件未调用服务器 bean
BootsFaces ajax events on inputtext not calling server bean
触发此事件 (onkeyup) 时,不会在 adminiEvent bean 上调用方法 searchingClients。
<b:inputText placeholder="nome" required="true" id="name"
value="#{adminiEvent.clientOnSearch.firstName}"
onkeyup="#{adminiEvent.searchingClients}" update=":adminiForm:clientSearchTable"
style="background: rgb(251, 251, 251) none repeat scroll 0% 0%;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);"
/>
有什么想法吗?
这是豆子:
@ManagedBean(name="adminiEvent" , eager=true)
@ViewScoped
public class AdminiEvent {
...
public void searchingClients(){
List<Client> values = new ArrayList<Client>();
//build query
Map<String,Object> queryValues = new HashMap<String,Object>();
StringBuilder query = new StringBuilder();
query.append("Select c from Client c where ");
if(!StringUtils.isEmpty(clientOnSearch.getFirstName())){
query.append("c.firstName = :firstname");
queryValues.put("firstname", clientOnSearch.getFirstName());
}
if(!queryValues.isEmpty()){
values.addAll(clientService.findClientByFilter(query.toString(),queryValues));
}
clients.addAll(values);
}
...
谢谢
这里我做了几个测试:
onkeyup="alert('test');ajax:adminiEvent.searchingClients;javascript:alert('test 2');"
value="#{adminiEvent.clientOnSearch.firstName}"
style="background: rgb(251, 251, 251) none repeat scroll 0% 0%;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);"/>`
第一次和第二次警报运行良好,但未调用 searchingClients。我在服务器端处于调试模式,但我什么也没得到。浏览器调试控制台或服务器控制台上也没有显示任何内容。
html 生成的截图:
谢谢
首先,您在 BootsFaces 0.8.1 中发现了一个错误。它应该在 BootsFaces 的开发人员快照中得到修复 - 请参阅 https://github.com/TheCoder4eu/BootsFaces-OSP/issues/151 了解如何获取它。
其次,您尝试调用 JavaScript 方法。要将其转换为后端 bean 调用,您必须在其前面加上 "ajax:" 并移除大括号。另外,您必须添加 Java 方法的括号。最后,同样重要的是,这种方法必须存在。 JSF 有时会自动添加前缀,如 "get"、"set" 或 "is"。 BootsFaces 没有。因此,您的示例应如下所示:
<b:inputText onkeyup="ajax:adminiEvent.getSearchingClients()" ... />
在 http://showcase.bootsfaces.net/forms/ajax.jsf. You might also be interested in the examples at https://github.com/stephanrauh/BootsFaces-Examples/tree/master/AJAX 阅读全文。
顺便说一句,我已经修复了 BootsFaces 0.8.2-SNAPSHOT 中的错误。 0.9.0-SNAPSHOT 目前比 0.8.2-SNAPSHOT 旧,因为我们已经开始修复大量错误而不是添加新功能。
我已经用这两个文件测试了 BootsFaces 0.8.2-SNAPSHOT:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:b="http://bootsfaces.net/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough" >
<h:head>
<title>BootsFaces: next-gen JSF Framework</title>
<meta name="author" content="Riccardo Massera"></meta>
</h:head>
<h:body style="padding-top: 60px">
<h:form>
lorem ipsum
<b:inputText placeholder="nome" required="true" id="name"
onkeyup="ajax:adminiEvent.searchingClients()"
onclick="ajax:adminiEvent.searchingClients()"
update="@none"
/>
</h:form>
</h:body>
</html>
和
import javax.faces.bean.ManagedBean;
import javax.faces.view.ViewScoped;
@ManagedBean
@ViewScoped
public class AdminiEvent {
private String firstName;
public void searchingClients() {
System.out.println("Backend bean called: " + firstName);
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String search) {
this.firstName = search;
}
}
触发此事件 (onkeyup) 时,不会在 adminiEvent bean 上调用方法 searchingClients。
<b:inputText placeholder="nome" required="true" id="name"
value="#{adminiEvent.clientOnSearch.firstName}"
onkeyup="#{adminiEvent.searchingClients}" update=":adminiForm:clientSearchTable"
style="background: rgb(251, 251, 251) none repeat scroll 0% 0%;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);"
/>
有什么想法吗?
这是豆子:
@ManagedBean(name="adminiEvent" , eager=true)
@ViewScoped
public class AdminiEvent {
...
public void searchingClients(){
List<Client> values = new ArrayList<Client>();
//build query
Map<String,Object> queryValues = new HashMap<String,Object>();
StringBuilder query = new StringBuilder();
query.append("Select c from Client c where ");
if(!StringUtils.isEmpty(clientOnSearch.getFirstName())){
query.append("c.firstName = :firstname");
queryValues.put("firstname", clientOnSearch.getFirstName());
}
if(!queryValues.isEmpty()){
values.addAll(clientService.findClientByFilter(query.toString(),queryValues));
}
clients.addAll(values);
}
...
谢谢
这里我做了几个测试:
onkeyup="alert('test');ajax:adminiEvent.searchingClients;javascript:alert('test 2');"
value="#{adminiEvent.clientOnSearch.firstName}"
style="background: rgb(251, 251, 251) none repeat scroll 0% 0%;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);"/>`
第一次和第二次警报运行良好,但未调用 searchingClients。我在服务器端处于调试模式,但我什么也没得到。浏览器调试控制台或服务器控制台上也没有显示任何内容。
html 生成的截图:
谢谢
首先,您在 BootsFaces 0.8.1 中发现了一个错误。它应该在 BootsFaces 的开发人员快照中得到修复 - 请参阅 https://github.com/TheCoder4eu/BootsFaces-OSP/issues/151 了解如何获取它。
其次,您尝试调用 JavaScript 方法。要将其转换为后端 bean 调用,您必须在其前面加上 "ajax:" 并移除大括号。另外,您必须添加 Java 方法的括号。最后,同样重要的是,这种方法必须存在。 JSF 有时会自动添加前缀,如 "get"、"set" 或 "is"。 BootsFaces 没有。因此,您的示例应如下所示:
<b:inputText onkeyup="ajax:adminiEvent.getSearchingClients()" ... />
在 http://showcase.bootsfaces.net/forms/ajax.jsf. You might also be interested in the examples at https://github.com/stephanrauh/BootsFaces-Examples/tree/master/AJAX 阅读全文。
顺便说一句,我已经修复了 BootsFaces 0.8.2-SNAPSHOT 中的错误。 0.9.0-SNAPSHOT 目前比 0.8.2-SNAPSHOT 旧,因为我们已经开始修复大量错误而不是添加新功能。
我已经用这两个文件测试了 BootsFaces 0.8.2-SNAPSHOT:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:b="http://bootsfaces.net/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough" >
<h:head>
<title>BootsFaces: next-gen JSF Framework</title>
<meta name="author" content="Riccardo Massera"></meta>
</h:head>
<h:body style="padding-top: 60px">
<h:form>
lorem ipsum
<b:inputText placeholder="nome" required="true" id="name"
onkeyup="ajax:adminiEvent.searchingClients()"
onclick="ajax:adminiEvent.searchingClients()"
update="@none"
/>
</h:form>
</h:body>
</html>
和
import javax.faces.bean.ManagedBean;
import javax.faces.view.ViewScoped;
@ManagedBean
@ViewScoped
public class AdminiEvent {
private String firstName;
public void searchingClients() {
System.out.println("Backend bean called: " + firstName);
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String search) {
this.firstName = search;
}
}