gpt4 book ai didi

java - 无法从 SelectOneMenu 中选择任何项目

转载 作者:行者123 更新时间:2023-12-02 07:00:44 25 4
gpt4 key购买 nike

在我的实现中,选择菜单会显示填充值。但是,如果我从菜单中选择任何项目,选择菜单不会设置值并重置为默认值。

转换器:

    package com.papar.common.converter;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.inject.Inject;

import org.springframework.stereotype.Component;

import com.papar.common.domain.Manufacturer;
import com.papar.common.repository.ManufacturerRepository;

@Component
@ManagedBean
@RequestScoped
public class ManufacturerConverter implements Converter {

@Inject
private ManufacturerRepository repository;

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value == null || value.isEmpty()) {
return null;
}

try {
return repository.getById(Integer.valueOf(value));
} catch (Exception e) {
throw new ConverterException(new FacesMessage(String.format("Cannot convert %s to User", value)), e);
}
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (!(value instanceof Manufacturer)) {
return null;
}

return String.valueOf(((Manufacturer) value).getId());
}

// ...
}

JSF:

       <p:column>Manufacturer</p:column>
<p:column>
<p:selectOneMenu converter="com.apt.papar.converter.ManufacturerConverter" value="#{brandBean.manufacturer}">
<f:selectItem itemLabel="Select Manufacturer" itemValue="-1"/>
<f:selectItems value="#{brandBean.manufacturers}" var="manufacturer" itemLabel="#{manufacturer.name}" itemValue="#{manufacturer.id}"/>

</p:selectOneMenu>

</p:column>

请帮忙..

最佳答案

修复以下三个问题:

  1. 您已经同时使用了 Spring、JSF 和 CDI 注释。坚持其中一项;
  2. converter="com.apt.papar.converter.ManufacturerConverter"需要由 @FacesConverter 设置的转换器 ID注释:因为您没有使用它,所以您应该使用与对象的绑定(bind): converter="#{manufacturerConverter}" ;
  3. itemValue<f:selectItems>标签应该指向一个对象,而不是它的 id: itemValue="#{manufacturer} ,否则你的转换器使用就会错误。

修复后,您的 <p:selectOneMenu>将会工作。

关于java - 无法从 SelectOneMenu 中选择任何项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16691723/

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