Я попытался сделать такой же список, как и в приведенной ниже ссылке: http://www.primefaces.org/showcase/ui/input/listbox.xhtmlОшибка проверки selectOneListbox. Entity @OneToOne отношения
К сожалению, я получаю сообщение об ошибке проверки:
Select Box: Validation Error: Value is not valid
Я не знаю, где я сделал ошибку. Я много читал об этой проблеме (в большинстве случаев она была решена BalusC), однако все еще не может найти проблему.
Если вы можете помочь, я действительно ценю.
StoreHouse.java
@Entity
public class StoreHouse implements Serializable {
@Id
@GeneratedValue
private Integer id;
@OneToOne
private Supply supply;
@Column(nullable = false)
private Integer amount;
//geters setters namedqueryies
Supply.java
@Entity
public class Supply implements Serializable {
@Id
@GeneratedValue
private Integer id;
@Column(unique = true, nullable = false, length = 32)
private String name;
@Column(length = 1024)
private String description;
@Column
private Double price;
@Enumerated(EnumType.STRING)
@NotNull
private SupplyType supplyType;
//geters setters namedqueryies
StoreHouseController.java
@ManagedBean
public class StoreHouseController implements Serializable {
@Inject
private StoreHouseBean storeHouseBean; // DAO for storeHouse
@ManagedProperty("#{supplyController}")
private SupplyController supplyController; //Manged bean for Supply
private StoreHouse storeHouse = new StoreHouse();
private List<Supply> allSupplies;
@PostConstruct
public void init() {
allSupplies = supplyController.findAll();
}
public void check() {
System.out.println("storeHousetheme" + storeHouse.toString()); // Function just to check if the supply was set
}
SupplyConverter.java
@FacesConverter("supplyConverter")
public class SupplyConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null && value.trim().length() > 0) {
try {
SupplyController supplyController = (SupplyController) context.getExternalContext().getApplicationMap().get("supplyController");
Supply supply = supplyController.findById(Integer.parseInt(value));
System.out.println("CONVERTER:" + supply.toString());
return supply;
} catch (NumberFormatException e) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion error", "ERROR."));
}
} else {
return null;
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {
if (object != null) {
return String.valueOf(((Supply) object).getId());
} else {
return null;
}
}
}
view.xhtml
<h:form>
<p:messages autoUpdate="true" />
<h:panelGrid columns="2">
<h:outputLabel value="Nazwa" />
<p:selectOneListbox id="supplies" value="#{storeHouseController.storeHouse.supply}" converter="supplyConverter" var="s" filter="true" label="Select Box">
<f:selectItems value="#{storeHouseController.allSupplies}" var="supply" itemLabel="#{supply.name}" itemValue="#{supply}"/>
<p:column>
<h:outputText value="#{s.name}" />
</p:column>
</p:selectOneListbox>
<p:commandButton action="#{storeHouseController.check}" type="submit" value="submit" />
</h:panelGrid>
Если вам нужен любой другой файл/класс, пожалуйста, просто добавьте комментарий.
'java.lang.Integer не может быть приведен к pl.gw.model.Supply' – Silwest
когда? в каком классе? – Dawn
После изменения itemvalue на supply.id. На мой взгляд, у нас должен быть объект не целочисленный. – Silwest