是否有可能设置一个<a href />在我<f:selectItem itemLabel="label" />在我的链接文字是itemLabel?
我正在使用普通的太阳组件.
我在这个奇怪的问题上失去了几天,我仔细检查了一切,但我的selectOneMenu根本不起作用,我无法理解为什么.
所以这是我的代码:
我的jsf
<p:selectOneMenu id="entityType"
value="#{entityBean.entity.type}"
style="width:240px;"
converter="entityTypeConverter"
valueChangeListener="#{entityBean.entityTypeListener}"
required="true">
<f:selectItems value="#{entityBean.typeList}"
var="et"
itemLabel="#{et.name}"
itemValue="#{et}" />
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
我的转换器:
@FacesConverter("entityTypeConverter")
public class EntityTypeConverter implements Converter {
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value == null || value.length() == 0) {
return null;
}
Long id = Long.parseLong(value);
return EntityType.findEntityType(id);
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
return value instanceof EntityType ? ((EntityType) value).getId().toString() : "";
}
}
Run Code Online (Sandbox Code Playgroud)
它在我创建时按预期工作(它传递所选值),但是当我尝试编辑实体时,实际上从未选择所选类型.我尝试使用primefaces 3.1.1和3.2但在查看/编辑模式下我无法获得所选值.
我究竟做错了什么?
提前致谢!
我坚持使用JSF RI 1.1_02并且看到了这个问题.
这是我期望工作的Facelet代码:
<h:form>
<h:selectOneMenu value="#{bean.num}" converter="javax.faces.Integer">
<f:selectItem itemLabel="one" itemValue="1" />
<f:selectItem itemLabel="two" itemValue="2" />
<f:selectItem itemLabel="three" itemValue="3" />
</h:selectOneMenu>
<h:commandButton value="submit" />
<h:messages />
</h:form>
Run Code Online (Sandbox Code Playgroud)
请求范围的bean:
public class Bean {
private int num;
public void setNum(Integer aNum) {
num = aNum;
}
public Integer getNum() {
return num;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到验证错误:值无效,无法想象当我编写的代码很少而且不需要任何转换器时,我做错了什么.我错过了一些明显的东西,或者这是JSF RI 1.1_02中的一个错误?
我可以通过简单地更改支持bean中的属性类型来解决这个问题,String但是当我(自动)转换应该在那里时我必须这样做而感到沮丧.
我想从selectOneMenu中选择另一个Skin时更改inputTexts的值.一切都很顺利,我的转换器从菜单中返回正确的对象,但inputTexts没有更新.
<h:form>
<h:selectOneMenu id="dropdownSkin"
value="#{helloBean.currentSkin}" defaultLabel="Select a skin.."
valueChangeListener="#{helloBean.skinValueChanged}" immediate="true"
onchange="this.form.submit()" converter="SkinConverter" >
<f:selectItems value="#{helloBean.mySkinsSI}" var="c"
itemValue="#{c.value}" />
</h:selectOneMenu>
<br />
<h:inputText id="name" value="#{helloBean.currentSkin.title}"></h:inputText>
<br />
<h:inputText id="tcolor" value="#{helloBean.currentSkin.titleBar.textColor}"></h:inputText>
<br />
<h:inputText id="bcolor" value="#{helloBean.currentSkin.titleBar.backgroundColorStart}"></h:inputText>
</h:form>
Run Code Online (Sandbox Code Playgroud)
这是我的Bean的样子.我调试它并正确设置了Object currentSkin.现在我需要知道如何更新文本字段内容.
@ManagedBean
@SessionScoped
public class HelloBean implements Serializable {
private static final long serialVersionUID = 1L;
private List<ExtendedSkin> mySkins;
private List<SelectItem> mySkinsSI;
private ExtendedSkin currentSkin;
public void skinValueChanged(ValueChangeEvent e) {
currentSkin = (ExtendedSkin) e.getNewValue();
FacesContext.getCurrentInstance().renderResponse();
}
public List<ExtendedSkin> getMySkins() {
mySkins = XMLParser.readExtendedSkins();
return …Run Code Online (Sandbox Code Playgroud) 我正在使用PrimeFaces在JSF中创建一个项目,我遇到了一个问题<p:SelectOneMenu>,特别是将一个对象的选定值转换为String.我已经编写了必需的Converter类,实现toString()和equals()方法,我认为非常正确.然而,在一个<h:messages />组件中,它无休止地给了我:
j_idt7:j_idt92: Validation Error: Value is not valid
j_idt7:j_idt98: Validation Error: Value is not valid
我必须选择属于一个较大形式的值.然后,根据所选的所有者(właściciel)和公司(firma),我将它们添加到数据库中.
这是我的<p:SelectOneMenu>(两次 - 两个菜单):
<p:selectOneMenu value="#{wniosek.selectedWl}" var="w">
<f:selectItem itemLabel="Wybierz" itemValue=""/>
<f:selectItems value="#{wniosek.listaWl}" var="wlasciciel"
itemLabel="#{wlasciciel.nazwisko}" itemValue="#{wlasciciel}" />
<p:column>
#{w.nazwisko}
</p:column>
<f:converter converterId="WlascicielConverter" />
</p:selectOneMenu>
<h:outputText value="Nazwa firmy: "/>
<p:selectOneMenu value="#{wniosek.selectedFi}" var="f">
<f:selectItem itemLabel="Wybierz" itemValue=""/>
<f:selectItems value="#{wniosek.listaFi}" var="firma"
itemLabel="#{firma.nazwa}" itemValue="#{firma}" />
<f:converter converterId="FirmaConverter" />
<p:column>
#{f.nazwa}
</p:column>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
这是我所有者的转换器类<p:SelectOneMenu>(同样我已经完成了公司的一个):
public class WlascicielConverter implements Converter …Run Code Online (Sandbox Code Playgroud) 在我的 JSF 页面上,我有一个 HTML 输入复选框,允许用户选择是否想要礼物,并且<div>复选框信息下的部分只有在选中复选框时才会显示。选中复选框后,用户将需要选择一个选项(从下拉菜单中,下拉菜单的初始值= null);但是,如果未选中复选框,则不需要选择。
所以,这里有两个条件:
A.Checkbox被选中(==播放div视图)
用户不选择任何内容-> 我希望显示所需的消息,这就是我所做的:
<p:message style="margin: 10px" id="messages7" for="npsScoreSupport" />
<h:selectOneMenu id="npsScoreSupport" value="#{npsBean.supportScore}" required="true" requiredMessage="Please select an option">
<f:selectItems value="#{npsBean.ratingPickList}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)B. 复选框未选中(== div 视图被隐藏)
由于我需要 requireMessage 来确保在选中复选框时选择了一个选项,我想知道是否可以根据复选框的状态使 requireMessage 成为条件?(选中复选框时需要,未选中时不需要)有什么建议吗?
============更新======================
所以现在我更新了我的复选框并将它与 JAVA 类中的函数连接起来(默认布尔变量检查 = true)
<h:selectBooleanCheckbox class="someClass" value="#{someBean.check}" />
Run Code Online (Sandbox Code Playgroud)
这是我的选择器
<h:selectOneMenu id="OptSelector" value="#{someBean.Opt}" required="#{someBean.check}" requiredMessage="Please select and option">
<f:selectItems value="#{npsBean.OptPickList}" />
Run Code Online (Sandbox Code Playgroud)
即使未选中复选框,提交也失败,似乎布尔检查从未改变。有谁知道为什么?
我查看了其他问题this和this等,问题是我的转换被调用,但 selectOneMenu 的值没有改变。我的实体类已生成,并且具有 equals 和 hashCode,我不想更改其中的任何内容 - 如果它重新生成,那么所有更改都将丢失(解决方法是更改实体类的 toString)。
XHTML 代码被剪断:
<p:selectOneMenu id="defid"
value="#{abcController.selected.defid}"
converter="defConverter">
Run Code Online (Sandbox Code Playgroud)
转换器:
@FacesConverter("defConverter")
public class DefConverter implements Converter
{
private static final Logger LOG = Logger.getLogger(DefConverter.class.getName());
@EJB
private DefFacade defFacade;
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String string)
{
LOG.info("getAsObject: " + string);
try
{
return defFacade.findWithNFieldsWithValue("name", string, "=").get(0);
}
catch (Exception ex)
{
LOG.log(Level.SEVERE, "Error while fetching Def for " + string, ex);
}
return null;
}
@Override …Run Code Online (Sandbox Code Playgroud) 我正在尝试将标签标签与我的下拉菜单相关联,以便屏幕阅读器可以访问它。我注意到在使用 p:selectOneMenu primefaces 时会生成一个不应该存在的输入元素。应用 p:outputLabel 时,它似乎工作正常(即,您单击标签文本并将焦点移至下拉菜单)。然而,事实证明焦点实际上正在移动到输入元素,而选择元素无法通过键盘访问(tabindex="-1")。以下是来自 primefaces 网站的示例:http : //www.primefaces.org/showcase/ui/input/oneMenu.xhtml
<h:form>
<p:messages autoUpdate="true" />
<h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">
<p:outputLabel for="console" value="Basic:" />
<p:selectOneMenu id="console" value="#{selectOneMenuView.console}" style="width:125px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItem itemLabel="Xbox One" itemValue="Xbox One" />
<f:selectItem itemLabel="PS4" itemValue="PS4" />
<f:selectItem itemLabel="Wii U" itemValue="Wii U" />
</p:selectOneMenu>
<p:outputLabel for="car" value="Grouping: " />
<p:selectOneMenu id="car" value="#{selectOneMenuView.car}">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{selectOneMenuView.cars}" />
</p:selectOneMenu>
<p:outputLabel for="city" value="Editable: " />
<p:selectOneMenu id="city" value="#{selectOneMenuView.city}" effect="fold" editable="true">
<f:selectItem itemLabel="Select One" itemValue="" …Run Code Online (Sandbox Code Playgroud) 我在 中设置了一个带有 POJO 和转换器的 selectOneMenu,p:dialog请参阅下面的源代码。它确实有效,除了最初,当它第一次以非下拉状态显示时,会选择第一个选项,而不是与 bean 值对应的选项。如果我保存 selectOneMenu 的状态而不与之交互,则会保存最初选择的第一个选择,因此实际值会被覆盖,但如果我选择不同的选择,则会正确保存。selectOneMenu 绑定到的 bean 值不能是null。
我调试了转换器,结果发现,当加载后备数据并且刷新并显示对话框时,所有选择都会经过转换器,再加上再次getAsString()选择实际 bean 值。尽管如此,第一个选项仍然被实际选中并显示在 selectOneMenu 中。当提交对话框的表单时,实际选择的选择将通过转换器的,无论这是错误选择的初始值还是手动选择的初始值。getAsObject()
请告知可能是什么问题。
调用对话框的按钮的 xhtml,其形式不同:
<p:commandButton id="toolbarEditButton"
value="Edit selected" update=":editMediaForm"
disabled="#{!contentManager.mediaSelected}"
actionListener="#{contentManager.editSelectedMedia}"
onclick="PF('editMediaWidget').show()" />
Run Code Online (Sandbox Code Playgroud)
对话框的xhtml:
<p:dialog id="editMediaDialog" widgetVar="editMediaWidget"
modal="true" resizable="false" >
<h:form id="editMediaForm" >
<p:panelGrid rendered="#{contentManager.isMediaSelected()}" columns="2" >
... <!-- other properties of the selected element -->
<p:outputLabel value="Media type" />
<p:selectOneMenu value="#{contentManager.selectedMedia.mediaType}"
converter="#{mediaTypeConverter}">
<f:selectItems value="#{mediaTypeConverter.allMediaTypes}"
var="mt" itemLabel="#{mt.name}" itemValue="#{mt}" />
<p:ajax listener="#{contentManager.onMediaTypeChanged()}" />
</p:selectOneMenu>
</p:panelGrid> …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个高级selectOneMenu(PrimeFaces) 以根据其标志图标选择语言环境。图标显示在列表中,但不显示所选项目(展示同样发生)。我怎么能这样做?
<p:selectOneMenu id="mySOMId" value="#{localeBean.locale}" var="mySOMVar" converter="#{localeConverter}" >
<f:selectItems
value="#{myBean.locales}"
var="localeSIVar"
itemLabel="#{localeSIVar.language}"
itemValue="#{localeSIVar}" />
<p:column style="text-align: center;" >
<h:graphicImage library="default" height="20" name="img/#{mySOMVar.language}.svg" />
</p:column>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
我可以看到它f:selectItems有一个itemLabelEscaped属性,我可以用它在 中输出<img>标签itemLabel,但我不知道我会在它的src.
谢谢
selectonemenu ×10
jsf ×8
primefaces ×5
jsf-2 ×2
validation ×2
checkbox ×1
converter ×1
converters ×1
hyperlink ×1
integer ×1
java ×1
jsf-1.1 ×1
required ×1
wcag ×1