- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,我需要对 selectOneMenu 标签进行一些说明,使用 EL 表达式来获取/设置值
<h:selectOneMenu id="variantsMenu"
value="#{missionHandler.selectedVariant}"
converter="#{missionHandler.variantConverter}">
<f:selectItem itemLabel="-- Select a Variant --" />
<f:selectItems value="#{missionHandler.variants}" var="variant"
itemValue="#{variant}" itemLabel="#{variant.commercialName}" />
</h:selectOneMenu>
我有这段代码,它显示一个列表,其中包含(“-- 选择一个变体--”,变体 1,变体 2,...变体 n)当我单击 Variant 时,我希望 missionHandler
managedBean 中的 selectedVariant
属性会自动更新。但这种情况并非如此。甚至没有调用 variantConverter
转换器将字符串“variant.commercialName”转换为真正的 Variant
对象。变体对象实现了 hashCode()
和 equals()
我的更新问题的解决方案是什么?
编辑:managedBean(简化)
@ManagedBean
@ViewScoped
public class MissionHandler implements Serializable {
private static final long serialVersionUID = 2462652101518266609L;
private List<FlightFeasibilityException> exceptions;
@EJB
private VariantDao variantDao;
private Variant selectedVariant;
private List<Variant> variants;
private VariantConverter variantConverter;
public MissionHandler() {
/** Create an empty list of exceptions */
exceptions = new ArrayList<FlightFeasibilityException>();
}
@PostConstruct
public void init() {
System.out.println("init done");
}
public List<FlightFeasibilityException> getExceptions() {
return exceptions;
}
public void setExceptions(List<FlightFeasibilityException> exceptions) {
this.exceptions = exceptions;
}
public Variant getSelectedVariant() {
return selectedVariant;
}
public void setSelectedVariant(Variant selectedVariant) {
this.selectedVariant = selectedVariant;
}
public List<Variant> getVariants() {
return variants;
}
public void setVariants(List<Variant> variants) {
this.variants = variants;
}
public VariantConverter getVariantConverter() {
return variantConverter;
}
public void setVariantConverter(VariantConverter variantConverter) {
this.variantConverter = variantConverter;
}
转换器
@FacesConverter(forClass=Variant.class)
public class VariantConverter implements Converter, Serializable {
private static final long serialVersionUID = 7053414108213420057L;
private VariantDao variantDao=new VariantDaoImpl();
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
System.out.println("convert to Object " + value);
Variant variant = variantDao.find(value);
System.out.println("got variant " + variant.getCommercialName());
return variant;
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
System.out.println("convert to String " + value);
return ((Variant) value).getCommercialName();
}
}
和xhtml文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Mission Page</title>
<link href="./css/styles.css" rel="stylesheet" type="text/css" />
</h:head>
<h:body>
<rich:panel>
<f:facet name="header">
Mission Information
</f:facet>
<a4j:outputPanel layout="block">
<h:form>
<h:outputText style="font-weight: bold;" value="Mission Id: " />
<h:inputText id="missionId" label="missionId"
value="#{missionHandler.mission.id}" disabled="true"
style=" width : 50px;">
</h:inputText>
<h:outputText style="font-weight: bold;" value="Mission Status: " />
<h:inputText id="missionStatus" label="missionStatus"
value="#{missionHandler.mission.status}" disabled="true">
</h:inputText>
</h:form>
<br />
<h:form>
<h:selectOneMenu value="#{missionHandler.selectedAircraftType}"
converter="#{missionHandler.acTypeConverter}">
<f:selectItem itemLabel="-- Select an A/C Type --" />
<f:selectItems value="#{missionHandler.aircraftTypes}" var="type"
itemValue="#{type}" itemLabel="#{type.typeOACI}" />
<f:ajax listener="#{missionHandler.changeSelectedAircraftType}"
render="@form" />
</h:selectOneMenu>
<h:selectOneMenu id="variantsMenu"
value="#{missionHandler.selectedVariant}"
converter="#{missionHandler.variantConverter}"
rendered="#{not empty missionHandler.selectedAircraftType}">
<f:selectItem itemLabel="-- Select a Variant --" />
<f:selectItems value="#{missionHandler.variants}" var="variant"
itemValue="#{variant}" itemLabel="#{variant.commercialName}" />
</h:selectOneMenu>
</h:form>
</a4j:outputPanel>
</rich:panel>
….. A LOT OF OTHER THINGS …..
</h:body>
</html>
最佳答案
关于您的代码的几点说明:
在托管 bean 的构造函数中做一些事情==糟糕的设计,请改用 @PostConstructor
。
在您的转换器中手动实例化 DAO==糟糕的设计。理想情况下,您的 DAO 应该是一个可以注入(inject)转换器的托管对象(最好是 EJB)。作为一个托管对象意味着它(理论上)可能是一个单例并由容器正确管理。至少这样,你不会为此感到难过。
尝试手动管理转换器。将转换器声明为独立组件并让容器完成它的工作,这样您就可以避免不必要的调试。
variantsMenu
没有附加 ajax 处理程序,因此在提交整个表单之前,您不会在支持 bean 中更新值
<h:selectOneMenu id="variantsMenu"
value="#{missionHandler.selectedVariant}"
converter="#{variantConverter}"
rendered="#{not empty missionHandler.selectedAircraftType}">
<f:ajax listener="#{missionHandler.changeVariant}" render="@form" />
<f:selectItem itemLabel="-- Select a Variant --" />
<f:selectItems value="#{missionHandler.variants}" var="variant"
itemValue="#{variant}" itemLabel="#{variant.commercialName}" />
</h:selectOneMenu>
关于jsf - selectOneMenu 选中值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15076178/
这个问题在这里已经有了答案: Make multiple dependent / cascading selection components in JSF (4 个答案) 关闭 2 年前。 我想在
这个问题在这里已经有了答案: How to load and display dependent h:selectOneMenu on change of a h:selectOneMenu (1
我想要多个 通过选择主要显示的 不工作的例子 //this one
我有一个 selectOneMenu,其中包含两个项目“Granted”和“Dismessed” 我在其下还有两个 selectO
在我的应用程序中,如果设置了另一个 SelectOneMenu,我将尝试设置/更新 SelectOneMenu。我们使用的是primefaces,所以我检查了primefaces 展示并找到了我正在寻
我想创建 JSF 注册表单,其中包含包含所有国家/地区列表的选择菜单。我知道这很容易用 Java 实现 HashMap但我不知道如何实现的棘手部分是,在用户从列表中选择他的国家后,第二个选择菜单与他所
我很长时间以来一直试图找出问题所在,但没有成功的结果。我在 Google 中搜索此内容,并尝试了几个不同的工作示例,但没有一个可以帮助我解决我的任务。 问题是,当“类别”selectOneMenu 更
我有一个带有惰性负载。在其中两列中,有一个 在他们每个人中。 第一列包含国家/地区列表,第二列包含数据库中的州列表。 我希望第二个菜单(包含州列表的菜单)仅显示数据表的每行中与中第一个菜单中的国家/地
好吧,我已经坚持了几天(轻描淡写)。 假设我有一个 selectOneMenu 我想根据所选选项更改另一个 selectOneMenu 上的选项在之前的 se
首先,我想为我发布的长代码道歉,它们非常简单,只是一个重复 17 次的 p:selectOneMenu(这就是为什么它很长)。 我遇到的问题是,如果我在一个表单中有太多 p:selectOneMenu
这是针对 JSF 2.0 的(请注意 - 这是 mojerra 实现,我没有使用 Icefaces、myfaces 等) 假设我的表单中只有一个下拉列表,并且该下拉列表绑定(bind)了一个存储值、标
信息 JSF 2.0 Primefaces 3.4 两个对象都是 People 对象 我有一个简单的下拉菜单,包含在提交表单提交(AJAX 调用)上的选择的表单中: ....
我有以下(不言自明的)实体关系: * Manufacturer * Car (Manufacturer.getCars()) * Tire (Car.getTires()) MyBean p
我正在使用可编辑的素面selectOneMenu显示一些值。如果用户从列表中选择一个项目,则应更新文本区域。但是,如果用户在selectOneMenu中键入内容,则不应更新文本区域。 我以为我可以解决
好吧,我需要对 selectOneMenu 标签进行一些说明,使用 EL 表达式来获取/设置值 我有这段代码,它
一个人只能拥有一辆汽车,但在数据表中我想显示列表中的所有汽车,但选择一个用户所属的人。这样用户就可以即时更新任何人的汽车。 假设我有两个 table 人 id name car_id 汽车 id na
我尝试加载 selectOneMenu 并给出以下异常:java.lang.IllegalStateException:提交响应后无法创建 session 。我有 xhtml:
好吧,我需要对 selectOneMenu 标签进行一些说明,使用 EL 表达式来获取/设置值 我有这段代码,它
Person can only have only one car ,但在数据表中我想显示列表中的所有汽车,但选择一个用户所属的用户。这样用户就可以即时更新任何人的汽车。 假设我有两个表 人物 id
我在 JSF 页面上使用 SelectOneMenu 组件和 SelectBooleanCheckbox 组件。 如果选择了组合框,我的 SelectOneMenu 应被阻止并设置为第一个元素(重置)
我是一名优秀的程序员,十分优秀!