gpt4 book ai didi

java - ValueChangeListener 不工作

转载 作者:行者123 更新时间:2023-11-30 09:53:58 28 4
gpt4 key购买 nike

这是我在托管 bean 中的代码:-

<?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:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<center>
<h:form>
<h2> <u>Select Fruit(s). </u> </h2>

<!-- Value Change Listener is entirely superflous. You can make a full blown project without requiring the need to ever use this...This is
just for demo purpose..-->

<h:selectManyMenu onchange="document.forms[0].submit();" style="height: 200px;font-size: 1.5em;width: 200px;" >
<f:selectItems value="#{actionValueLisBean.fruitsList}" var="fruit" itemLabel="#{fruit}" itemValue="#{fruit}"/>

<f:valueChangeListener type="beans.ActionValueLisBean"/>
</h:selectManyMenu>

<h3> Your previous selection is :<h:outputText value="#{actionValueLisBean.prevSel}"/></h3>
<h3>Your current selection is :<h:outputText value="#{actionValueLisBean.currSel}"/></h3>

</h:form>
</center>
</h:body>
</html>

这是我的 bean :-

package beans;

import com.sun.jmx.remote.internal.ArrayQueue;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ValueChangeEvent;
import javax.faces.event.ValueChangeListener;

@ManagedBean
@RequestScoped
public class ActionValueLisBean implements ValueChangeListener {


private List<String> fruitsList;
private String currSel;
private String prevSel;

public String getCurrSel() {
return currSel;
}

public void setCurrSel(String currSel) {
this.currSel = currSel;
}

public String getPrevSel() {
return prevSel;
}

public void setPrevSel(String prevSel) {
this.prevSel = prevSel;
}



public List<String> getFruitsList() {
return fruitsList;
}

public void setFruitsList(List<String> fruitsList) {
this.fruitsList = fruitsList;
}



public ActionValueLisBean() {
fruitsList = new ArrayQueue<String>(5);

fruitsList.add("Apple");
fruitsList.add("Mango");
fruitsList.add("Banana");
fruitsList.add("Peach");
fruitsList.add("Plum");

}

@Override
public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {

if(event.getOldValue() != null)
prevSel = event.getOldValue().toString();
if(event.getNewValue() != null)
currSel = "abc";

}


}

然后我将 prevSel 和 currSel 绑定(bind)到 h:outputText。但是即使 processValueChange 被正确触发并且 System.out.println(event.getNewValue()); 也工作正常,该值也没有得到。我也尝试设置不同的 bean 范围但没有用。我知道 ValueChangeListener 完全没用。我仍然想知道它是如何工作的。

提前致谢:)

最佳答案

我不确定您所说的“未获得值(value)”是什么意思。你应该再澄清一点。

至少,它的唯一目的是监听一个值的变化,这样你就可以根据变化做一些业务,比如记录或预加载一些与新值相关的东西。当初始值等于提交值时,则不会调用此方法。

这是一个代码片段,您可以自己尝试一下:

<h:form>
<p>Input value: <h:inputText value="#{bean.value}" valueChangeListener="#{bean.change}"/></p>
<p>Old value: <h:outputText value="#{bean.oldValue}" /></p>
<p>New value: <h:outputText value="#{bean.newValue}" /></p>
<p><h:commandButton value="submit" action="#{bean.submit}" /></p>
</h:form>

bean 类:

package com.example;

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

@ManagedBean
@ViewScoped
public class Bean {

private String value;
private String oldValue;
private String newValue;

public void submit() {
System.out.println("Submit: " + value);
}

public void change(ValueChangeEvent event) {
oldValue = (String) event.getOldValue();
newValue = (String) event.getNewValue();
System.out.println("Change: " + oldValue + " to " + newValue);
}

public String getValue() {
return value;
}

public String getOldValue() {
return oldValue;
}

public String getNewValue() {
return newValue;
}

public void setValue(String value) {
this.value = value;
}

}

更新:根据您的更新:您正在使用 bean 的两个不同实例。您实际上是在显示托管 bean 的值,而不是 f:valueChangeListener 新创建的 bean 的值。

关于java - ValueChangeListener 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595421/

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