Jsf 哪个属性控制SelectOne菜单中提交的实际数据?
应该允许这样做。但这似乎不起作用,因为在选择类别时,问题实体不会显示为添加到我的数据库中。我也试过了Jsf 哪个属性控制SelectOne菜单中提交的实际数据?,jsf,primefaces,attributes,selectonemenu,Jsf,Primefaces,Attributes,Selectonemenu,应该允许这样做。但这似乎不起作用,因为在选择类别时,问题实体不会显示为添加到我的数据库中。我也试过了 itemValue="#{category.categoryID} 因为newQuestion一直在为表单中的文本字段工作。但是,这样做似乎还没有达到预期的效果 itemValue是我应该使用的属性吗?如果没有,那是哪一个 更新: 所以仍然很难理解,但是这里有一些代码展示了类别是如何实现的 类别控制器类: questionController.newQuestion.categoryID 由
itemValue="#{category.categoryID}
因为newQuestion一直在为表单中的文本字段工作。但是,这样做似乎还没有达到预期的效果
itemValue是我应该使用的属性吗?如果没有,那是哪一个
更新:
所以仍然很难理解,但是这里有一些代码展示了类别是如何实现的
类别控制器类:
questionController.newQuestion.categoryID
由于要创建的实体以及要为其选择类别的实体是
问题
,因此必须在questionController.newQuestion
上设置值。也就是说,您必须在questionController.newQuestion.categoryId
上设置categoryId
您可以通过将p:selectOneMenu
的值设置为该值来实现。因此,请为p:selectOneMenu
-open标记尝试以下操作:
public class Category {
private int categoryID;
private String name;
您是否尝试过
?是的。但是这样做会改变列表中出现的项目,而不是传递的值。因此,类别应该在中。itemValue
是您要查找的。它必须与
的值属性的数据类型相同。您正在通过保存在categoryController中的id从数据库检索实体。selectedCategory
?更多的代码可能会有所帮助。列表中出现的项目由f:selectItems
的值
-属性控制,因此不能更改。您确定更改了正确标记处的属性吗?不,@Lester,用户创建的所有类别都应显示在列表中,因此selectItems值属性中的#{categoryController.categories}。用户1983983,你是对的。这就是为什么我不应该仅仅用一个类别来填充这个列表。非常糟糕的建议。您不应该自己操作实体ID(持久性层是唯一负责此操作的层),而应该操作整个实体本身。首先,itemValue
是错误的,它应该是{category}
。但是当在问题中使用该类别时,我如何访问该类别ID呢?我不知道在业务逻辑中做了什么,也许这就是OP需要它的方式。我知道直接选择一个类别并通过转换器将其设置为实体是正确的方法,但我只是想解决他的问题,关于具体问题,并假设后端是以所需的方式实现的。Chucky,它已经在{category}
本身中了。另一种选择是将私有类别selectedCategory
替换为私有长选择类别ID
。这样,当前的答案将变得有效。
public class CategoryController extends BasePageController {
@Autowired
private ICategoryRepository categoryRepository;
private List<Category> categories;
private Category newCategory = new Category();
private Category selectedCategory = new Category();
private Category[] selectedCategories;
public class Category {
private int categoryID;
private String name;
<p:selectOneMenu value="#{questionController.newQuestion.categoryID}">