Я по-прежнему оставался в этой проблеме. Может кто-нибудь сказать мне, что я получаю неправильноНевозможно сохранить модель с отношением «многие ко многим»: форма возвращает ошибку проверки JSF: значение недействительно
Groupp.java
public class Groupp implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Basic(optional = false)
@NotNull
private String name;
@Basic(optional = false)
@NotNull
private String description;
@JoinTable(name = "group_role", joinColumns = {
@JoinColumn(name = "group_id", referencedColumnName = "id", nullable = false)}, inverseJoinColumns = {
@JoinColumn(name = "role_id", referencedColumnName = "id", nullable = false)})
@ManyToMany
private List<Role> roles;
//getters and setters
}
GroupController.java
@Named("groupController")
@SessionScoped
public class GroupController implements Serializable {
private Groupp current;
@EJB
private GroupFacade ejbFacade;
public GroupController() {
}
public Groupp getSelected() {
if (current == null) {
current = new Groupp();
selectedItemIndex = -1;
}
return current;
}
public String createGroup() {
System.out.println("********Start Create Group***********");
try {
getFacade.create(current);
return null;
}
@FacesConverter(forClass = Groupp.class)
public static class GrouppControllerConverter implements Converter {
@Override
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
System.out.println("Groupp::Submitted: String: "+value);
if (value == null || value.length() == 0) {
return null;
}
GroupController controller = (GroupController) facesContext.getApplication().getELResolver().
getValue(facesContext.getELContext(), null, "grouppController");
System.out.println("Groupp::Object of Submitted: String: "+controller.getGroupp(getKey(value)));
return controller.getGroupp(getKey(value));
}
java.lang.Integer getKey(String value) {
java.lang.Integer key;
key = Integer.valueOf(value);
return key;
}
String getStringKey(java.lang.Integer value) {
StringBuilder sb = new StringBuilder();
sb.append(value);
return sb.toString();
}
@Override
public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
if (object == null) {
return null;
}
if (object instanceof Groupp) {
Groupp o = (Groupp) object;
return getStringKey(o.getId());
} else {
throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + Groupp.class.getName());
}
}
}
}
RoleController.java
@Named("roleController")
@SessionScoped
public class RoleController implements Serializable {
private Role current;
@EJB
private RoleFacade ejbFacade;
public RoleController() {
}
public SelectItem[] getItemsAvailableSelectMany() {
for (Object x : ejbFacade.findAll()) {
items[i++] = new SelectItem(x, x.toString());
}
return items;
}
@FacesConverter(forClass = Role.class)
public static class RoleControllerConverter implements Converter {
@Override
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
System.out.println("Role::Submitted: String: "+value);
if (value == null || value.length() == 0) {
return null;
}
RoleController controller = (RoleController) facesContext.getApplication().getELResolver().
getValue(facesContext.getELContext(), null, "roleController");
System.out.println("Role::Object of Submitted: String: "+controller.getRole(getKey(value)));
return controller.getRole(getKey(value));
}
java.lang.Integer getKey(String value) {
java.lang.Integer key;
key = Integer.valueOf(value);
return key;
}
String getStringKey(java.lang.Integer value) {
StringBuilder sb = new StringBuilder();
sb.append(value);
return sb.toString();
}
@Override
public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
if (object == null) {
return null;
}
if (object instanceof Role) {
Role o = (Role) object;
return getStringKey(o.getId());
} else {
throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + Role.class.getName());
}
}
}
}
create.jsp
<f:view>
<h:form id="groupForm">
<h:inputText id="name" value="${groupController.selected.name}" />
<h:inputText id="description" value="${groupController.selected.description}" />
<h:selectManyListbox id="roles" value="${groupController.selected.roles}" >
<f:selectItems value="${roleController.itemsAvailableSelectMany}" var="role" itemValue="${role}" itemLabel="${role.label}" >
</h:selectManyListbox>
<b:commandButton action="${groupController.createGroup}" value="SAVE" />
</h:form>
</f:view>
Каждый раз, когда я нажимаю кнопку SAVE, я получаю «groupForm: role: Validation Error: Value is not valid» и «******** Начать создание группы ********** *»никогда не печатается
У вас есть другие страницы, которые отлично работают? (Меня беспокоит использование как jsp, так и $ вместо #, что не является стандартом для jsf 2.2) –
да даже текущая страница сохраняется, если я не выбираю какую-либо роль. Но как только одна или несколько ролей выбраны, она не работает – Paullo
У вас есть конвертер для роли? –