- html - 我的下拉菜单的内容关闭得太快
- c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'
- html - 内容容器下的 CSS 下拉菜单
- html - 如何停止嵌套列表重叠父列表?
我看到了一百万个话题在讨论这个问题,但没有一个与我的问题相匹配,这里是:
我的查询将以下结果添加到列表中:
- Caixa Economica Federal
- ASSOCIAÇÃO DOS FRANQUEADOS DA REDE DE LANCHOLETES GIRAFFAS
当尝试通过 h:selectOneMenu
中的第一项进行搜索时,一切正常。但是当我尝试按列表中的第二项进行搜索时,出现以下错误:
j_idt49:advertiserName: Validation Error: Value is not valid
这真的很奇怪,至少对我来说,我看到的所有以前的答案都没有任何意义,如果你认为搜索可以正常工作的话。
这是我的代码:
commercialRecognized.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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="jsf/template/template.xhtml">
<ui:define name="conteudo">
<h:outputScript target="body" library="js" name="commercialRecognized.js"/>
<div id="wrapper">
<div id="body_site">
<div id="content">
<div class="success urlpie hide">#{bundle.OperacaoSucesso}</div>
<div class="error"></div>
<span class="clearfix_2"> </span>
<h2><h:outputText value="#{bundle.ComerciaisReconhecidos}"></h:outputText></h2>
<p class="subtitle"><h:outputText value="#{bundle.ConsulteOsComerciais}"></h:outputText></p>
<div class="box">
<p class="w_100 txt_bold al_left"><h:outputText value="#{bundle.PesquisarPor}"></h:outputText>
</p>
<h:form><p:growl id="messages" showDetail="true"/></h:form>
<h:form>
<ul class="form_list_left al_right w_800">
<li>
<h:outputLabel for="advertiserName" value="#{bundle.Anunciante_Title}"/>
<h:selectOneMenu value="#{matchesController.selected.advertiserName}" id="advertiserName" class="w_220" title="#{bundle.Anunciante_Title}">
<f:selectItem itemLabel="Selecione..." itemValue=""/>
<f:selectItems value="#{matchesController.advertiserNames}"/>
</h:selectOneMenu>
</li>
<li>
<h:outputLabel for="agencyName" value="#{bundle.Agencia_Title}"/>
<h:selectOneMenu value="#{matchesController.selected.agencyName}" id="agencyName" class="w_220" title="#{bundle.Agencia_Title}">
<f:selectItem itemLabel="Selecione..." itemValue=""/>
<f:selectItems value="#{matchesController.agencyNames}"/>
</h:selectOneMenu>
</li>
<li>
<h:outputLabel for="productName" value="#{bundle.Produto_Title}"/>
<h:selectOneMenu value="#{matchesController.selected.productName}" id="productName" class="w_220" title="#{bundle.Produto_Title}">
<f:selectItem itemLabel="Selecione..." itemValue=""/>
<f:selectItems value="#{matchesController.productNames}"/>
</h:selectOneMenu>
</li>
<li>
<h:outputLabel for="iniDate" value="#{bundle.DataInicial_Title}"/>
<h:inputText value="#{matchesController.selected.iniDate}" class="w_80 data" id="iniDate" required="false" validatorMessage="#{bundle.DataInicial_Title} inválida."/>
</li>
<li>
<h:outputLabel for="finalDate" value="#{bundle.DataFinal_Title}"/>
<h:inputText value="#{matchesController.selected.finalDate}" class="w_80 data" id="finalDate" required="false" validatorMessage="#{bundle.DataFinal_Title} inválida."/>
</li>
<li>
<h:outputLabel for="iniTime" value="#{bundle.HoraInicial_Title}"/>
<h:inputText value="#{matchesController.selected.iniTime}" class="w_80 hora" id="iniTime" required="false" validatorMessage="#{bundle.HoraInicial_Title} inválida."/>
</li>
<li>
<h:outputLabel for="finalTime" value="#{bundle.HoraFinal_Title}"/>
<h:inputText value="#{matchesController.selected.finalTime}" class="w_80 hora" id="finalTime" required="false" validatorMessage="#{bundle.HoraFinal_Title} inválida."/>
</li>
<li>
<h:outputLabel for="equipmentName" value="#{bundle.NomeEquipamento_Title}"/>
<h:inputText value="#{matchesController.selected.equipmentName}" class="w_130 equipment" id="equipmentName" required="false" validatorMessage="#{bundle.NomeEquipamento_Title} inválido."/>
</li>
<li>
<h:outputLabel for="channelCode" value="#{bundle.CodigoCanal_Title}"/>
<h:inputText value="#{matchesController.selected.channelCode}" class="w_80 channelCode" id="channelCode" required="false" validatorMessage="#{bundle.CodigoCanal_Title} inválido."/>
</li>
<li><h:commandLink action="#{matchesController.clear}" class="bt_limpar button29" style="margin-top:13px;"><span class="screen_reader_text">Limpar</span></h:commandLink></li>
<li><h:commandLink action="#{matchesController.search}" class="bt_pesquisar button29" style="margin-top:13px;"><span class="screen_reader_text">Pesquisar</span></h:commandLink></li>
</ul>
</h:form>
<span class="clearfix_2"> </span>
</div>
<div class="resultado">
<c:if test="#{matchesController.tableRs.size() > 0}">
<h:dataTable id="tableResultados" value="#{matchesController.tableRs}" var="item">
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.DuracaoComercialCadastrado}"/>
</f:facet>
<h:outputText value="#{item.durationCommercialRegistered}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.DuracaoComercialReconhecido}"/>
</f:facet>
<h:outputText value="#{item.durationCommercialRecognized}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.Versao}"/>
</f:facet>
<h:outputText value="#{item.version}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.ID}"/>
</f:facet>
<h:outputText value="#{item.ID}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.Confiabilidade}"/>
</f:facet>
<h:outputText value="#{item.confiability}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.Distorcao}"/>
</f:facet>
<h:outputText value="#{item.distortion}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.DataEHoraExibicao}"/>
</f:facet>
<h:outputText value="#{item.dateShow}"/>
<h:outputText value="#{item.timeShow}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.SegundosDoComercial}"/>
</f:facet>
<h:outputText value="#{item.commercialSeconds}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.Status}"/>
</f:facet>
<h:outputText value="#{item.status}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.TituloMaterial}"/>
</f:facet>
<h:outputText value="#{item.materialTitle}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{bundle.AnuncianteTable}"/>
</f:facet>
<h:outputText value="#{item.announcer}"/>
</h:column>
</h:dataTable>
</c:if>
</div>
<span class="clearfix_2"> </span>
</div>
<!--#content-->
</div>
<!--#body_site-->
</div>
<!--#wrapper-->
</ui:define>
</ui:composition>
</h:body>
</html>
MatchesController.java
package net.checkmidia.auditoria.managedbean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import net.checkmidia.auditoria.entity.Matches;
import net.checkmidia.auditoria.managedbean.converter.SearchCommercialsDTO;
import net.checkmidia.auditoria.managedbean.converter.TableResultSearchCommercialsDTO;
import net.checkmidia.auditoria.managedbean.helper.JsfHelper;
import net.checkmidia.auditoria.session.MatchesSession;
import net.checkmidia.auditoria.util.DateTimeUtil;
import net.checkmidia.auditoria.util.ObjectUtil;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
@ManagedBean(name = "matchesController")
@SessionScoped
public class MatchesController implements Serializable {
/* Instância de SearchCommercialsDTO com todos os dados digitados na pesquisa */
private SearchCommercialsDTO current;
/* Lista com todos os resultados obtidos na query de pesquisa */
private List<TableResultSearchCommercialsDTO> tableRs = new ArrayList<TableResultSearchCommercialsDTO>();
@EJB
private MatchesSession ejbFacade;
private int selectedItemIndex;
/**
* Combos
*/
private String advertiserName;
private String agencyName;
private String productName;
private Map<String, String> advertiserNames = new HashMap<String, String>();
private Map<String, String> agencyNames = new HashMap<String, String>();
private Map<String, String> productNames = new HashMap<String, String>();
/**
* Construtor default
*/
public MatchesController() {}
/**
* Obtém todos os inputs marcados com "selected"
* @return o formulario de pesquisa
*/
public SearchCommercialsDTO getSelected() {
if (current == null) {
current = new SearchCommercialsDTO();
selectedItemIndex = -1;
}
return current;
}
/**
* Obtém a facade
* @return facade
*/
public MatchesSession getFacade() {
return ejbFacade;
}
/**
* Popula o combo de anunciantes com todos os anunciantes gravados no banco
*/
public void getAdvertisers() {
try {
List<String> advertiserList = ejbFacade.getAdvertiser();
for (String advertiser : advertiserList) {
advertiserNames.put(advertiser, advertiser);
}
} catch (Exception ex) {
Logger.getLogger(MatchesController.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Popula o combo de agências com todos os agências gravados no banco
*/
public void getAgencys() {
try {
List<String> agencyList = ejbFacade.getAgencys();
for (String agency : agencyList) {
agencyNames.put(agency, agency);
}
} catch (Exception ex) {
Logger.getLogger(MatchesController.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Popula o combo de produtos com todos os produtos gravados no banco
*/
public void getProducts() {
try {
List<String> productList = ejbFacade.getProducts();
for (String product : productList) {
productNames.put(product, product);
}
} catch (Exception ex) {
Logger.getLogger(MatchesController.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Inicializa os métodos para popular os combos assim que a página
* for carregada
*/
@PostConstruct
public void combo(){
getAdvertisers();
getAgencys();
getProducts();
}
/**
* Limpa todos os dados do formulário de pesquisa e da tabela
*/
public void clear() {
tableRs.clear();
}
/**
* Método de pesquisa
* Esse método executa a facade e então obtém os resultados da pesquisa de acordo
* com o formulario de pesquisa populando, então, a tabela
* @return null
*/
public String search() {
try {
List<Matches> execute = getFacade().searchMatches(current);
if (!ObjectUtil.isEmpty(execute)) {
tableRs.clear();
for (int i = 0; i < execute.size(); i++) {
tableRs.add(
new TableResultSearchCommercialsDTO(
String.valueOf(execute.get(i).getMatchSearchedMaterialStartPosition()),
String.valueOf(execute.get(i).getMatchSourceMaterialStartPosition()),
String.valueOf(execute.get(i).getEngineVersion()),
String.valueOf(execute.get(i).getId()),
String.valueOf(execute.get(i).getMatchDistortion()),
String.valueOf(execute.get(i).getMatchMethod()),
DateTimeUtil.getDate(execute.get(i).getStartDate()),
DateTimeUtil.getTime(execute.get(i).getStartDate()),
String.valueOf(execute.get(i).getDuration()),
String.valueOf(execute.get(i).getStatus()),
String.valueOf(execute.get(i).getIdSourceMaterial().getTitle()),
String.valueOf(execute.get(i).getIdSourceMaterial().getAdvertiserName()),
String.valueOf(execute.get(i).getMatchConfidence())));
}
JsfHelper.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("SearchSuccessfull"));
} else {
tableRs.clear();
JsfHelper.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("NoResults"));
}
return null;
} catch (Exception e) {
Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, e);
JsfHelper.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
return null;
}
}
/**
* Getters e setters
*/
public List<TableResultSearchCommercialsDTO> getTableRs() {
return tableRs;
}
public String getAdvertiserName() {
return advertiserName;
}
public void setCity(String advertiserName) {
this.advertiserName = advertiserName;
}
public Map<String, String> getAdvertiserNames() {
return advertiserNames;
}
public String getAgencyName() {
return agencyName;
}
public String getProductName() {
return productName;
}
public Map<String, String> getAgencyNames() {
return agencyNames;
}
public Map<String, String> getProductNames() {
return productNames;
}
public void setAdvertiserName(String advertiserName) {
this.advertiserName = advertiserName;
}
public void setAgencyName(String agencyName) {
this.agencyName = agencyName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public void setAdvertiserNames(Map<String, String> advertiserNames) {
this.advertiserNames = advertiserNames;
}
public void setAgencyNames(Map<String, String> agencyNames) {
this.agencyNames = agencyNames;
}
public void setProductNames(Map<String, String> productNames) {
this.productNames = productNames;
}
public void setCities(Map<String, String> advertiserNames) {
this.advertiserNames = advertiserNames;
}
public void setTableRs(List<TableResultSearchCommercialsDTO> tableRs) {
this.tableRs = tableRs;
}
}
MatchesControllerConverter.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package net.checkmidia.auditoria.managedbean.converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import net.checkmidia.auditoria.entity.Matches;
import net.checkmidia.auditoria.managedbean.MatchesController;
/**
* Conversor para a entidade Matches
* @author gabrielbombardi
*/
@FacesConverter(forClass = Matches.class)
public class MatchesControllerConverter implements Converter {
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
if (value == null || value.length() == 0) {
return null;
}
MatchesController controller = (MatchesController) facesContext.getApplication().getELResolver().
getValue(facesContext.getELContext(), null, "matchesController");
return value;
}
java.lang.Integer getKey(String value) {
java.lang.Integer key;
key = Integer.valueOf(value);
return key;
}
String getStringKey(java.lang.Integer value) {
StringBuffer sb = new StringBuffer();
sb.append(value);
return sb.toString();
}
public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
if (object == null) {
return null;
}
if (object instanceof Matches) {
Matches o = (Matches) object;
return getStringKey(o.getId());
} else {
throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + Matches.class.getName());
}
}
}
你们愿意帮助我吗?谢谢!
PS:抱歉我的英语不好 :)
最佳答案
您忘记根据 the contract 在您的 Matches
类中实现 equals()
和 hashCode()
. JSF 使用它来将所选项目与可用项目相匹配。否则,只有 new
运算符创建的项目才会被认为与自身相等,但是 new
运算符创建的两个独立实例永远不会被认为是相等的,即使它们可能是基于它们的内部属性在技术上是平等的。
假设您的 Matches
类有一个代表技术数据库标识符的 id
字段,那么应该这样做:
@Override
public boolean equals(Object other) {
return (id != null && other != null && getClass() == other.getClass())
? id.equals(((Matches) other).id)
: (other == this);
}
@Override
public int hashCode() {
return (id != null)
? (getClass().hashCode() + id.hashCode())
: super.hashCode();
}
此外,您转换器的 getAsObject()
方法在其当前形式下看起来很可疑。它完全忽略了 controller
并直接返回未转换的原始 value
。该方法应该将获得的表示 Matches
实例 ID 的字符串转换为具体的 Matches
实例。
它应该看起来像这样:
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
if (value == null || value.length() == 0) {
return null;
}
Integer id = getKey(value);
Matches matches = getItSomehowBasedOn(id);
return matches;
}
关于java - JSF 验证错误 h :selectOneMenu but for only one item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16240337/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!