- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了 h:selectOneRadio 的 valueChangeListener="#{user.loadYesNo}"的问题
(我在 Tomcat-7 上使用 Mojarra 2-0-8)。
如果我同时删除了包含“h:selectOneRadio”的 panelGrid,则值更改 litener 将被触发。
看法:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head><title> Starting JSF</title></h:head>
<h:body>
<h:form>
<h:panelGrid column="2">
<h:outputLabel>User Name</h:outputLabel>
<h:inputText id="loginName" value="#{user.userName}"></h:inputText>
<h:outputLabel>Password</h:outputLabel>
<h:inputSecret id="loginPassword" value="#{user.password}"></h:inputSecret>
</h:panelGrid>
<h:commandButton value="Submit" action ="#{user.validateLogin}">
<f:ajax execute="@form" render="yesNoRadioGrid message"></f:ajax>
</h:commandButton>
<h:panelGrid>
<h:outputText id ="message" value="#{user.message}"></h:outputText>
</h:panelGrid>
<h:panelGrid id="yesNoRadioGrid">
<h:panelGrid columns="2" rendered="#{user.yesNoRadioGridFlag}">
<h:outputText id ="otherLbl" value="Select Yes or No"></h:outputText>
<h:selectOneRadio id="yesNoRadio" value ="#{user.yesNoRadio}" valueChangeListener="#{user.loadYesNo}">
<f:selectItem itemValue="1" itemLabel="YES"></f:selectItem>
<f:selectItem itemValue="0" itemLabel="NO"></f:selectItem>
<f:ajax event="change" execute="@form" render="userDetailsGrid "></f:ajax>
</h:selectOneRadio>
</h:panelGrid>
</h:panelGrid>
<h:message for ="yesNoRadio"> </h:message>
<h:panelGrid id="userDetailsGrid">
<h:panelGrid columns="2" rendered="#{user.userDetailsGridFlag}">
<h:outputLabel>Name :</h:outputLabel>
<h:inputText id="customerName" value="#{user.customerName}"></h:inputText>
<h:outputLabel>Salary: </h:outputLabel>
<h:inputText id="customerSalary" value="#{user.customerSalary}"></h:inputText>
</h:panelGrid>
</h:panelGrid>
</h:form>
</h:body>
</html>
package com.jsf.test;
import javax.faces.bean.*;
import javax.faces.event.ValueChangeEvent;
@ManagedBean
public class User {
private String userName;
private String password;
private String message;
private String customerName;
private String customerSalary;
private Integer yesNoRadio;
private Boolean yesNoRadioGridFlag;
private Boolean userDetailsGridFlag;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getCustomerSalary() {
return customerSalary;
}
public void setCustomerSalary(String customerSalary) {
this.customerSalary = customerSalary;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getYesNoRadio() {
return yesNoRadio;
}
public void setYesNoRadio(Integer yesNoRadio) {
this.yesNoRadio = yesNoRadio;
}
public Boolean getUserDetailsGridFlag() {
return userDetailsGridFlag;
}
public void setUserDetailsGridFlag(Boolean userDetailsGridFlag) {
this.userDetailsGridFlag = userDetailsGridFlag;
}
public Boolean getYesNoRadioGridFlag() {
return yesNoRadioGridFlag;
}
public void setYesNoRadioGridFlag(Boolean yesNoRadioGridFlag) {
this.yesNoRadioGridFlag = yesNoRadioGridFlag;
}
public String validateLogin() {
if (userName.equals("xyz") && password.equals("xyz")) {
message = "Login Success";
yesNoRadioGridFlag = true;
} else {
yesNoRadioGridFlag = false;
message = "Login Failure";
}
return message;
}
public void loadYesNo(ValueChangeEvent evt){
Integer yesNoValue = (Integer)evt.getNewValue();
setYesNoRadio(yesNoValue);
userDetailsGridFlag = true;
}
}
最佳答案
您需要将 bean 放在 View 范围内以保留 rendered
的基础条件后续请求的属性。
@ManagedBean
@ViewScoped
public class User {
// ...
}
valueChangeListener
旨在在您想在服务器端值更改事件上挂一个钩子(Hook)时使用,它允许您拥有
两个旧值(value)和新值(value)尽在掌握。例如,记录事件。它不打算根据更改执行业务操作。为此,您应该使用
listener
<f:ajax>
的属性反而。
<h:selectOneRadio id="yesNoRadio" value ="#{user.yesNoRadio}" valueChangeListener="#{user.loadYesNo}">
<f:selectItem itemValue="1" itemLabel="YES"></f:selectItem>
<f:selectItem itemValue="0" itemLabel="NO"></f:selectItem>
<f:ajax event="change" execute="@form" render="userDetailsGrid "></f:ajax>
</h:selectOneRadio>
<h:selectOneRadio id="yesNoRadio" value ="#{user.yesNoRadio}">
<f:selectItem itemValue="1" itemLabel="YES"></f:selectItem>
<f:selectItem itemValue="0" itemLabel="NO"></f:selectItem>
<f:ajax execute="@form" listener="#{user.loadYesNo}" render="userDetailsGrid"></f:ajax>
</h:selectOneRadio>
ValueChangeEvent
方法的属性。
关于jsf-2 - 没有从 <h :selectOneRadio> which is placed in side a <h:panelGrid> 调用 valueChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180938/
我有以下代码:
这是我在托管 bean 中的代码:- Facelet Title Se
如何在数据表中使用 UIInput 组件正确实现 ValueChangeListener,然后我进入监听器方法获取行索引已更改、新值和旧值 变化,不一定产生POST到Server,Post
我正在使用 p:ajax监听器处理值更改事件(因为 valueChangeListener 在表单提交时启动): 处理方法: public void onNameChanged(final Ajax
我的 JSF 页面有两个下拉列表,我想根据第一个下拉列表中选择的值加载第二个列表。但是,仅在我第二次更改选择时才检测到“onchange”事件! 网页代码片段:
我对 ValueChangeListener 有疑问.我有这个代码: private void caricaSelectMainUser(){ Object[] a = socFilName.
我查看了其他类似的帖子,但没有任何帮助。这是我的代码: function submit1() { document.forms["form"].submit(); }
我正在学习如何在 JSF 中使用事件。出于某种原因,当我更改下拉菜单的值时,程序没有更改文本字段中的值。该页面加载并显示“德国”,但不会将文本字段更改为“DE”。有什么建议吗? 索引.xhtml:
我们有一个自定义的 JSF 组件,它以特定方式呈现一些按钮和一个选择框。这是由扩展 UIInput 的类完成的。 xhtml 模板中使用的自定义组件如下所示: 现在,由于我们从运行 JSF 2.0
我有一个简单的 ice:SelectOneMenu 和一个 ice:outputLabel 我想做的就是更改下拉列表中的值以设置我的文本标签告诉我我更改了值以及新值是什么(简单测试,一旦它起作用,我实
我正在尝试 vaadin 网站上提供的教程,当我在表的行上设置项目选择时,教程建议我应该将以下行添加到我的表类中。 addListener((Property.ValueChangeListener)
摘要: JSPX 页面中有一个input File功能,用户可以在其中选择要上传的文件。用户将按保存按钮将文件存储在数据库中。 工作流程: 当用户选择要上传的文件时,valueChangeListen
我正在使用 jDeveloper 12.1.3 和 MAF 2.0.0.0。我正在尝试在移动应用程序中build设置页面。所有项目均基于移动设备上的本地 SQLite 数据库。我已经设置了 POJO(
嗨,我正在与 oracle-adf 合作使用 Jdeveloper。我尝试使用 valuechangelister
假设我像这样定义一个 ComboBox: ComboBox myCombo = new ComboBox(); myCombo.addValueChangeListener(event -> {
我有一个自定义组件,想要向其中添加一个 ValueChangeListener。但我的注册方法有问题。 这是我的自定义组件。 public class CustomComp extends CssLa
它可以很好地加载stateList,但是当我更改状态的值时,它会调用backbean,但addressBO为空。我该如何修复它?还有其他办法吗? 提前致谢。 BackBean
在许多情况下,我需要在运行时在应用程序的许多地方使用某些 UIComponent 的值。但问题是我无法在 ValueChangeListener 之外访问组件的值。我尝试将此值存储在本地临时变量中,我
我调用 valueChangeListener在 上它在数据表中。并且该数据表再次位于另一个(外部)数据表内。在valueChangeListener方法我想要外部dataTable的实例对象。有没
我正在尝试为我的 Web 应用程序实现审计跟踪功能,该功能记录: lastModified(时间戳) modifiedBy(用户信息) userComment(值变化的原因) 对于我的每个输入字段(输
我是一名优秀的程序员,十分优秀!