gpt4 book ai didi

jsf - Bootsfaces inputText使用ajax更新bean中的值导致失去焦点

转载 作者:行者123 更新时间:2023-12-04 20:19:27 25 4
gpt4 key购买 nike

我在使用带有 ajax 的 bootsfaces inputText 时发现了一个问题。我使用的是 JSF 2.2、Bootsfaces 0.8.1 和 Primefaces 5.3。

我正在尝试将日期值输入到 inputText 字段中。只要我输入日期的最后一个值,inputText 就会触发更改事件。此时我想使用 ajax 调用 bean 方法。问题是,一旦我尝试输入最后一个值并且该方法从未被调用,我的字段就会失去焦点。

所以我对 Primefaces 进行了一些尝试,它几乎可以正常工作。在这一点上,我有不同的问题:

  1. 为什么我的 inputText 字段在输入最后一个值时失去焦点? (Bootsfaces)
  2. 为什么在失去焦点后从未调用 bean 方法? (Bootsfaces)
  3. 是否可以在字段设置bean 值后调用bean 方法? (Primefaces)

我添加了下面的代码,所以也许您可以重现此行为。

test.xhtml - 包含 primefaces 和 bootsfaces 字段的示例 xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:b="http://bootsfaces.net/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">

<h:head>
<meta charset="UTF-8"/>
</h:head>

<h:body>
<h:form id="form">
<b:panel id="filterPanel" title="Filter properties" immediate="true" collapsed="false" collapsible="true">
<b:row>
<b:column span="12">
<b:inputText id="dateA" type="date" value="#{test.dateA}" immediate="true" class="form-control">
<f:ajax event="change" listener="#{test.searchA()}"/>
</b:inputText>
</b:column>
</b:row>
<b:row>
<b:column span="12">
<p:inputText id="dateB" type="date" value="#{test.dateB}" immediate="true" class="form-control">
<p:ajax event="change" listener="#{test.searchB()}"/>
</p:inputText>
</b:column>
</b:row>
</b:panel>
</h:form>
</h:body>
</html>

TestBean.java - 我的用于设置值和调用方法的 bean

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean(name = "test")
@ViewScoped
public class TestBean {

private String dateA;
private String dateB;

public void searchA() {
System.out.println("Search A");
}

public void searchB() {
System.out.println("Search B");
}

public String getDateA() {
return dateA;
}

public void setDateA(String dateA) {
this.dateA = dateA;
System.out.println(dateA);
}

public String getDateB() {
return dateB;
}

public void setDateB(String dateB) {
this.dateB = dateB;
System.out.println(dateB);
}

}

请帮我找到解决方案或解释我在这里做错了什么。

谢谢韦伯

最佳答案

您发现了 BootsFaces 和 PrimeFaces 之间的细微差别。我建议您始终定义 process 的值和 update为清楚起见。在你的情况下,

    <b:inputText id="dateA" type="date" value="#{test.dateA}" immediate="true" class="form-control">
<f:ajax event="change" listener="#{test.searchA()}" render="@none"/>
</b:inputText>

使 BootsFaces 输入字段的行为与其对应的 PrimeFaces 完全相同。

update 的默认值和 process是不同的。从 BootsFaces 0.8.5 开始,默认值为:

  • process="@form"for <b:commandButton /><b:commandLink />
  • 对所有其他 BootsFaces 组件进行 process="@this"
  • 为每个 BootsFaces 组件更新 ="@form"

根据 Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes ,PrimeFaces 默认值为: enter image description here

为方便起见,这是我的 XHTML 文件版本:
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd” xmlns:b="http://bootsfaces.net/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">

        <h:head>                                                                                                            
<meta charset="UTF-8"/>
</h:head>

<h:body>
<h:form id="form">
<b:panel id="filterPanel" title="Filter properties" immediate="true" collapsed="false" collapsible="true">
<b:row>
<b:column span="12">
<b:inputText id="dateA" type="date" value="#{test.dateA}" immediate="true" class="form-control">
<f:ajax event="change" listener="#{test.searchA()}" render="@none"/>
</b:inputText>
</b:column>
</b:row>
<b:row>
<b:column span="12">
<p:inputText id="dateB" type="date" value="#{test.dateB}" immediate="true" class="form-control">
<p:ajax event="change" listener="#{test.searchB()}"/>
</p:inputText>
</b:column>
</b:row>
</b:panel>
</h:form>
</h:body>
</html>

我已经使用 BootsFaces 0.8.5 对其进行了测试。

关于jsf - Bootsfaces inputText使用ajax更新bean中的值导致失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37101804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com