Jsf 使用BootsFaces实现自动完成(使用inputText提前键入)
我用JavaEE开发了一个web应用程序,在这个应用程序中有一个inputText,允许根据学生的姓名搜索他。 然而,我面临着一个我找不到解决办法的问题。 我使用带有typeahead(Bootsfaces)的inputText,如果我向它发送一个列表Etudiant(我的列表对象),它会工作,但是当我向它发送一个列表字符串时,不会出现任何建议:/ 在我的控制器(Java)中,我返回一个包含每个学生的姓名和姓氏的列表,我希望能够给出该列表的建议 下面是我的xHtml代码:Jsf 使用BootsFaces实现自动完成(使用inputText提前键入),jsf,bootsfaces,Jsf,Bootsfaces,我用JavaEE开发了一个web应用程序,在这个应用程序中有一个inputText,允许根据学生的姓名搜索他。 然而,我面临着一个我找不到解决办法的问题。 我使用带有typeahead(Bootsfaces)的inputText,如果我向它发送一个列表Etudiant(我的列表对象),它会工作,但是当我向它发送一个列表字符串时,不会出现任何建议:/ 在我的控制器(Java)中,我返回一个包含每个学生的姓名和姓氏的列表,我希望能够给出该列表的建议 下面是我的xHtml代码: <b:input
<b:inputText style="width:200px" value="" placeholder="Rechercher étudiant" typeahead="true" typeahead-values="#{etudiantController.getEtudiants()}"/>
有我的控制器(etudiantController)代码:
public List getEtudiants(){
etudiants=gestionEtudiant.selectAll();
List listeNomPrenom=new ArrayList();
对于(教育对象e:教育对象){
添加(e.getNom()+“”+e.getPrenom());
}
返回listeNomPrenom;
}
我希望不要打扰我的帖子,提前谢谢;) 这里有几件事需要解决 首先,您需要一个支持bean值,以便组件具有适当的引用值。不设置
值
可能会自动完成,具体取决于组件的实现方式,但您无法访问用户稍后在控制器中实际输入的内容。对于某些组件,它可能会使组件以不希望的方式运行。因此,您需要将其连接到bean属性
其次,typeahead值
需要一个直接向上的字符串或bean属性。只有在非常特殊的情况下,您才需要调用bean属性的getter——因此您应该引用该属性
第三,不要返回新的学生列表,而是尝试利用Java内置的toString()
功能在typeahead值中使用。然后,您不必创建一个全新的列表,而是可以依靠Java为您进行转换
因此,一个完整的解决方案,模仿你正在尝试做的事情,并翻译成英语,看起来是这样的
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
xmlns:b="http://bootsfaces.net/ui">
<h:head>
<title>Autocomplete test</title>
</h:head>
<h:body>
<h:form>
<b:inputText value="#{studentBean.studentEntry}" placeholder="Search student"
typeahead="true" typeahead-values="#{studentBean.students}"/>
</h:form>
</h:body>
</html>
自动完成测试
@数据
@命名
@视域
公共类StudentBean实现了可序列化{
私人名单学生;
私人字符串学生中心;
@施工后
公共void init(){
学生=新数组列表();
添加(新学生(“卡尔”、“萨根”);
添加(新学生(“恩里科”、“费米”);
添加(新学生(“Jay”、“Miner”);
}
@资料
@AllArgsConstructor
公立班学生{
私有字符串名;
私有字符串lastName;
@凌驾
公共字符串toString(){
返回String.format(“%s%s”,lastName,firstName);
}
}
}
请注意,这个示例使用Lombok-so@Data注释为属性创建所需的setter和getter
还要注意toString()
实际上是如何翻转名称并将姓氏放在第一位的
就像您在代码中所做的那样。所以这里有几件事需要解决
首先,您需要一个支持bean值,以便组件具有适当的引用值。不设置值
可能会自动完成,具体取决于组件的实现方式,但您无法访问用户稍后在控制器中实际输入的内容。对于某些组件,它可能会使组件以不希望的方式运行。因此,您需要将其连接到bean属性
其次,typeahead值
需要一个直接向上的字符串或bean属性。只有在非常特殊的情况下,您才需要调用bean属性的getter——因此您应该引用该属性
第三,不要返回新的学生列表,而是尝试利用Java内置的toString()
功能在typeahead值中使用。然后,您不必创建一个全新的列表,而是可以依靠Java为您进行转换
因此,一个完整的解决方案,模仿你正在尝试做的事情,并翻译成英语,看起来是这样的
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
xmlns:b="http://bootsfaces.net/ui">
<h:head>
<title>Autocomplete test</title>
</h:head>
<h:body>
<h:form>
<b:inputText value="#{studentBean.studentEntry}" placeholder="Search student"
typeahead="true" typeahead-values="#{studentBean.students}"/>
</h:form>
</h:body>
</html>
自动完成测试
@数据
@命名
@视域
公共类StudentBean实现了可序列化{
私人名单学生;
私人字符串学生中心;
@施工后
公共void init(){
学生=新数组列表();
添加(新学生(“卡尔”、“萨根”);
添加(新学生(“恩里科”、“费米”);
添加(新学生(“Jay”、“Miner”);
}
@资料
@AllArgsConstructor
公立班学生{
私有字符串名;
私有字符串lastName;
@凌驾
公共字符串toString(){
返回String.format(“%s%s”,lastName,firstName);
}
}
}
请注意,这个示例使用Lombok-so@Data注释为属性创建所需的setter和getter
还要注意toString()
实际上是如何翻转名称并将姓氏放在第一位的
就像您在代码中所做的一样。我的错误是因为在我的字符串列表中出现了撇号:/谢谢您提供了非常完整的答案;)我的错误是因为在我的字符串列表中,出现了撇号:/Thanky you you's more complete答案;)
@Data
@Named
@ViewScoped
public class StudentBean implements Serializable {
private List<Student> students;
private String studentEntry;
@PostConstruct
public void init() {
students = new ArrayList<>();
students.add(new Student("Carl", "Sagan"));
students.add(new Student("Enrico", "Fermi"));
students.add(new Student("Jay", "Miner"));
}
@Data
@AllArgsConstructor
public class Student {
private String firstName;
private String lastName;
@Override
public String toString() {
return String.format("%s %s", lastName, firstName);
}
}
}