我想制作一个selectOneMenu下拉列表,以便我可以在我的问题上选择一个状态.是否可以使f:selectItem更灵活,考虑到如果枚举的顺序发生变化会发生什么,以及列表是否很大?我能做得更好吗?是否可以自动"选择"问题所具有的项目?
恩类
public enum Status {
SUBMITTED,
REJECTED,
APPROVED
}
Run Code Online (Sandbox Code Playgroud)
问题实体
@Enumerated(EnumType.STRING)
private Status status;
Run Code Online (Sandbox Code Playgroud)
JSF
<div class="field">
<h:outputLabel for="questionStatus" value="Status" />
<h:selectOneMenu id="questionStatus" value="#{bean.question.status}" >
<f:selectItem itemLabel="Submitted" itemValue="0" />
<f:selectItem itemLabel="Rejected" itemValue="1" />
<f:selectItem itemLabel="Approved" itemValue="2" />
</h:selectOneMenu>
<hr />
</div>
Run Code Online (Sandbox Code Playgroud) 我有一个ap:selectOneMenu的问题,无论我做什么我都无法让JSF调用JPA实体上的setter.JSF验证失败,显示以下消息:
form:location:验证错误:值无效
我有这个工作在几个相同类型的其他类(即,连接表类),但不能为我的生活让这一个工作.
如果有人可以针对此类问题提出一些故障排除/调试技巧,我们将不胜感激.
使用日志语句我已经验证了以下内容:
Conveter将返回正确的,非null数值.setLocation(Location location)永远不会调用setter .这是我能做的最简单的例子,它根本不起作用:
<h:body>
<h:form id="form">
<p:messages id="messages" autoUpdate="true" />
<p:selectOneMenu id="location" value="#{locationStockList.selected.location}" converter="locationConverter">
<p:ajax event="change" update=":form:lblLocation"/>
<f:selectItems value="#{locationStockList.locationSelection}"/>
</p:selectOneMenu>
</h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)
转换器:
@FacesConverter(forClass=Location.class, value="locationConverter")
public class LocationConverter implements Converter, Serializable {
private static final Logger logger = Logger.getLogger(LocationConverter.class.getName());
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value.isEmpty())
return null;
try {
Long id = Long.parseLong(value);
Location location = ((LocationManagedBean) context.getApplication().getELResolver().getValue(context.getELContext(), null, "location")).find(id);
logger.log(Level.SEVERE, …Run Code Online (Sandbox Code Playgroud) 我正在创建一个Web应用程序,您必须从DB中读取对象/实体列表并在JSF中填充它<h:selectOneMenu>.我无法对此进行编码.有人可以告诉我该怎么做吗?
我知道如何List<User>从数据库中获取数据.我需要知道的是,如何填充此列表<h:selectOneMenu>.
<h:selectOneMenu value="#{bean.name}">
...?
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud) 我想知道什么是允许用户在selectOneMenu中选择任何内容的最佳或最简单的方法.
我的例子:我有一个注册用户列表,管理员应该能够按一些标准过滤显示的用户列表.这些标准,如usertype(employee,customer,...)可以由selectOneMenus选择,如下所示:
<h:selectOneMenu value="#{myBean.selectedUsertype}" converter="#{usertypeConverter}">
<f:selectItems value={myBean.usertypes}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
当相应的selectOneMenu由使用转换器的POJO列表支持时,如何将项添加到列表中,表明用户没有选择任何特定项?目前我有一个虚拟的usertype对象显示标签"---",但这在我的应用程序的其他方面引起了几个问题,我不认为这是最好的解决方案.
我有理解如何有效地使用JSF 2中的选择和POJO /实体.例如,我试图Warehouse通过下面的下拉列表选择一个实体:
<h:selectOneMenu value="#{bean.selectedWarehouse}">
<f:selectItem itemLabel="Choose one .." itemValue="#{null}" />
<f:selectItems value="#{bean.availableWarehouses}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
以下托管bean:
@Named
@ViewScoped
public class Bean {
private Warehouse selectedWarehouse;
private List<SelectItem> availableWarehouses;
// ...
@PostConstruct
public void init() {
// ...
availableWarehouses = new ArrayList<>();
for (Warehouse warehouse : warehouseService.listAll()) {
availableWarehouses.add(new SelectItem(warehouse, warehouse.getName()));
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,我使用整个Warehouse实体作为值SelectItem.
当我提交表单时,会失败并显示以下消息:
'null Converter'的转换错误设置值'com.example.Warehouse@cafebabe'.
我希望Warehouse当我将它包装在一个中时,JSF可以将正确的对象设置为我的托管bean SelectItem.将我的实体包装在里面SelectItem意味着跳过Converter为我的实体创建一个.
Converter每当我想在我的实体中使用实体时,我真的必须使用<h:selectOneMenu>吗?JSF应该可以从可用项列表中提取所选项.如果我真的必须使用转换器,那么实际的方法是什么?到目前为止,我想到了这个:
Converter为实体创建实现. …如何使默认选项<f:selectItem>之内<h:selectOneMenu>?
这是必需的,当加载页面时,已经选择了特定的"20"下拉项.
<h:selectOneMenu value="#{fileSearchCriteriaOut.recordsPerPage}" >
<f:selectItem itemLabel="5" itemValue="5" />
<f:selectItem itemLabel="10" itemValue="10" />
<f:selectItem itemLabel="20" itemValue="20" selected="true"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
这四个不起作用:
<f:selectItem itemLabel="20" selected="true"/>
<f:selectItem itemLabel="20" selected="selected"/>
<f:selectItem itemLabel="20" checked="checked"/>
<f:selectItem itemLabel="20" checked="true"/>
Run Code Online (Sandbox Code Playgroud) 我正在填充<p:selectOneMenu/>数据库,如下所示.
<p:selectOneMenu id="cmbCountry"
value="#{bean.country}"
required="true"
converter="#{countryConverter}">
<f:selectItem itemLabel="Select" itemValue="#{null}"/>
<f:selectItems var="country"
value="#{bean.countries}"
itemLabel="#{country.countryName}"
itemValue="#{country}"/>
<p:ajax update="anotherMenu" listener=/>
</p:selectOneMenu>
<p:message for="cmbCountry"/>
Run Code Online (Sandbox Code Playgroud)
加载此页面时,默认选择的选项是,
<f:selectItem itemLabel="Select" itemValue="#{null}"/>
Run Code Online (Sandbox Code Playgroud)
转换器:
@ManagedBean
@ApplicationScoped
public final class CountryConverter implements Converter {
@EJB
private final Service service = null;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
try {
//Returns the item label of <f:selectItem>
System.out.println("value = " + value);
if (!StringUtils.isNotBlank(value)) {
return null;
} // Makes no difference, if removed.
long parsedValue …Run Code Online (Sandbox Code Playgroud) 我正在开发一个JSF页面,其中包含一个基于以下内容的下拉列表List<SelectItem>:
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
我需要得到双方当前选定项的值和标签.现在我只得到价值.我怎样才能获得标签?
我有以下下拉列表:
<h:selectOneMenu value="#{user.favCoffee3}" onclick="">
<f:selectItems value="#{user.favCoffee3Value}" var="c"
itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
我想通过下拉列表项单击从bean启动一些方法.我怎样才能实现它?
快问.在使用SelectOneMenu之前,我没有想到这一点.这是我的代码.
<h:outputLabel for="listaRegiones" value="Región: " />
<p:selectOneMenu id="listaRegiones" value="#{nuevaProvincia.regionSelect}" required="true">
<f:selectItems value="#{nuevaProvincia.regiones}" />
</p:selectOneMenu>
<p:message for="listaRegiones" />
Run Code Online (Sandbox Code Playgroud)
这是我的支持豆.
@ManagedBean(name="nuevaProvincia")
@ViewScoped
public class nuevaProvincia implements Serializable {
public static final long serialVersionUID = 1L;
public nuevaProvincia() throws DAOException {
this.provincia = new Provincia();
this.regiones = new ArrayList<SelectItem>();
ArrayList<Region> regs = new ArrayList<Region>();
try
{
regs = Region.obtenerRegiones();
}
catch(DAOException e)
{
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Hubo un error: "+e.getMessage(), "Hubo un error: "+e.getMessage()));
}
if(regs.size()>0)
{
for(Region r : regs)
{
SelectItem …Run Code Online (Sandbox Code Playgroud) jsf ×10
selectonemenu ×10
converter ×3
jsf-2 ×2
primefaces ×2
action ×1
database ×1
enums ×1
jpa ×1
jsf-2.2 ×1
label ×1
updatemodel ×1
validation ×1