我从a获取所选项目时遇到问题selectOneMenu.
这是我的JSF代码:
<h:form id="mainfrm">
<h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">
<h:outputText value="Basic Usage: " />
<p:selectOneMenu id="domaine" value="#{projet.currentDomaines}">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{projet.initDomaines()}" var="d" itemValue="#{d}" itemLabel="#{d.libelleDomaine}" />
<p:ajax update="formEquipe" process="mainfrm" event="change" />
</p:selectOneMenu>
</h:panelGrid>
</h:form>
<h:form id="formEquipe">
<h:panelGrid id="display" columns="2" cellpadding="4">
<f:facet name="header">
<p:graphicImage value="/images/cars/xxxx.jpg"/>
</f:facet>
<h:outputText value="Domaine name :" />
<h:outputText value="#{projet.currentDomaines.libelleDomaine}"/>
<h:outputText value="Director :" />
<h:outputText value="#{projet.currentDomaines.nomDirecteur}" />
</h:panelGrid>
</h:form>
Run Code Online (Sandbox Code Playgroud)
似乎一切都是正确的但我必须遗漏一些东西......所以我通过改变当前的Domaines(对象类型Domaines)来测试文本(String)并且它工作了,这里是代码:
<h:form id="mainfrm">
<h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">
<h:outputText value="Basic Usage: " />
<p:selectOneMenu id="domaine" value="#{projet.text}">
<f:selectItem …Run Code Online (Sandbox Code Playgroud) 对于我的项目,我想用h:selectOneMenu实现一个组合框.我读了很多关于如何正确处理selectOneMenu以及如何实现自定义转换器的帖子.组合框应存储来自不同数据库表(名为fk_ID)的ID(长),其中约束已到位.到目前为止,一切似乎都按计划运作.现在我的问题:
列fk_ID是可选的,因此组合框中的第一个选项是f:selectItem,没有标记为"choose ..."的值.当我保存表单并更改值时,一切正常,除非我将其设置为"选择...".我得到的错误是约束完整性违规.
我也发现了问题:转换器按预期返回null,但bean接收Long 0.
XHTML:
<h:selectOneMenu value="#{userBean.selectedModel.fk_id}"
id="combobox">
<f:selectItem itemLabel="choose ..." />
<f:selectItems
value="#{userBean.items}"
var="item"
itemLabel="#{item.value}"
itemValue="#{item.id}"
/>
<f:converter converterId="userConverter" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
自定义转换器:
@FacesConverter(value = "userConverter")
public class UserConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
if (arg2 != null && !arg2.equals("null"))
return Long.valueOf(arg2);
return null;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
return String.valueOf(arg2);
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个带有视图范围的bean,并希望在两个不同的页面和第一页之间传递参数,在此链接之前,我在<p:selectOneMenu/>哪里选择测试哪个id应该作为GET参数传递
<p:selectOneMenu value="#{addQuestion.test}" id="tests"
converter="#{testConverter}" required="true" requiredMessage="Please, choose test">
<f:selectItem itemLabel="--Select a test--" itemValue="" />
<f:selectItems value="#{addQuestion.testList}" var="testItem"
itemValue="#{testItem}" itemLabel="#{testItem.testName}" />
<p:ajax process="@this"
listener="#{addQuestion.getQuestionsBySubject()}"
update="addingQuestionsTable, testId" />
</p:selectOneMenu>
<h:link value="Add new question" outcome="addQuestion">
<f:param id="testId" name="testId" value="#{addQuestion.test.testIdentifer.testId}"/>
</h:link>
Run Code Online (Sandbox Code Playgroud)
//在第二页
<f:metadata>
<f:viewParam name="testId"
value="#{addQuestion.test.testIdentifer.testId}"
converter="#{testConverter}" required="true" requiredMessage="Invalid page access. Please use a link from within the system."/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
和豆
@ManagedBean(name = "addQuestion")
@ViewScoped
public class AddQuestion implements Serializable {
private Test test;
//get
//set
}
Run Code Online (Sandbox Code Playgroud)
但是当我试图在第二页上获得价值时,我没有什么可以得到表达#{addQuestion.test.testIdentifer.testId}"而且在开发模式中我得到了
值为null,因此不会添加到URL. …
以下selectItems来自Session Scoped Map.当用户单击"提交"按钮时,应该在Request Scoped支持bean中设置日期字段并将其显示在页面上.
<h:selectOneMenu value="#{dropDown.selectedDate}">
<f:selectItems value="#{mapValues.dateMap.entrySet()}" var="entry" itemLabel="#{entry.value}" itemValue="#{entry.key}" />
</h:selectOneMenu>
<h:commandButton value="Submit" />
You selected Date #{dropDown.selectedDate}
Run Code Online (Sandbox Code Playgroud)
但是,收到以下转换错误:
Conversion Error setting value 'Wed Dec 26 15:09:32 EST 2012' for 'null Converter'.
Run Code Online (Sandbox Code Playgroud)
我不确定为什么会收到这个错误.我尝试在selectOneMenu标记上设置javax.faces.DateTime转换器,但后来又收到了更加神秘的验证错误.
找到一条帖子,建议检查equal()方法是否可用,以及项目选择是否在下拉列表中,在这种情况下两者都应该为true.
我能想到的一个解决方法是将我的地图更改为String键,其中日期作为字符串保存.但这似乎有点矫枉过正.
关于如何使这个设置工作的任何建议?
支持豆:
@Named
@RequestScoped
public class DropDown {
private Date selectedDate;
public Date getSelectedDate() {
return selectedDate;
}
public void setSelectedDate(Date selectedDate) {
this.selectedDate = selectedDate;
}
}
Run Code Online (Sandbox Code Playgroud)
地图豆:
@Named
@SessionScoped
public class MapValues implements Serializable {
private Map<Date, String> dateMap; …Run Code Online (Sandbox Code Playgroud) 我是关于开发一个小型的jsf项目,我到了一个状态,我必须在枚举类型中存储一个值,但无法弄清楚如何处理
所以我在这里发布我的问题的一个小描述:
这是枚举类型:
package com.enumeration;
import java.io.Serializable;
public enum Gender implements Serializable{
Male('M'), Female('F');
private char description;
private Gender(char description) {
this.description = description;
}
public char getDescription() {
return description;
}
Run Code Online (Sandbox Code Playgroud)
}
xhtml页面:
<h:panelGrid columns="2">
<h:outputLabel value="Nom:" for="nom" />
<h:inputText id="nom" value="#{employee.newEmployee.nom}" title="Nom" />
<h:outputLabel value="Gender:" for="gender" />
<h:selectOneMenu value="#{employeeBean.newEmployee.gender}" id="gender">
<f:selectItem itemLabel="Male" itemValue="Male" />
<f:selectItem itemLabel="Female" itemValue="Female"/>
</h:selectOneMenu>
</h:panelGrid>
<h:commandButton value="ajouter" action="index.xhtml" actionListener="#{employeeBean.ajouter}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试向数据库添加一个新行时,jsf抛出错误: j_idt7:性别:'男性'必须可转换为枚举.
我在网上做了一些搜索,但无法理解解决方案请帮忙谢谢
我有一个数字列表(范围500 - 5000,步长500).我想添加一个小数点1000 - > 1.000; 2500 - > 2.500等,但只是标签不能保存为值.我尝试了以下但它没有工作:
<h:selectOneMenu value="#{bean.selectedValue}">
<f:convertNumber type="currency" locale="de-DE" pattern="#,###" />
<f:selectItems itemValue="#{bean.selectItemslist}" var="item" itemLabel="#{item.label}" itemValue="#{item.value} />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
但这没有做任何事情:(
尝试了几种模式并包含integerOnly ="true"但似乎没有任何效果:(感谢您的帮助!
我正在使用Primefaces 3.4和JSF 2.1,我试图让ap:panel项目出现并消除选择p:oneselectmenu.我有一个p:datatable面板,我想要出现并动态填充,这就是我使用面板的原因.数据表的功能很好,但是面板没有.我尝试将面板上的"呈现"选项与一个变量相关联,该变量随着菜单的每个选择的变化而变化,但没有发生任何事情.我也尝试过,p:outputpanel但没有发生任何事情.所以我尝试使用具有相同操作的按钮但又失败了.这是我的代码:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/template.xhtml">
<ui:define name="title">
#{msg.teaching}: #{msg.socialSecurity}
</ui:define>
<ui:define name="body">
<h:form id="form">
<p:messages id="messages" autoUpdate="true"/>
<p:panel id="selectSocialSecurityPanel" rendered="true">
<p:panelGrid>
<p:row>
<p:column>
<p:selectOneMenu value="#{selectOneMenuSocialSecurityTeachingBean.choice}">
<p:ajax update="socialSecurityDataTablePanel, socialSecurityDataTable, toUpdate" listener="#{dataTableSocialSecurityBean.updateTable()}"/>
<f:selectItem itemLabel="#{msg.select}" itemValue=""/>
<f:selectItems value="#{selectOneMenuSocialSecurityTeachingBean.socialSecurityTeachingList}"/>
</p:selectOneMenu>
</p:column>
<p:column>
<p:commandButton value="#{msg.find}" actionListener="#{dataTableSocialSecurityBean.updateTable()}" update="socialSecurityDataTablePanel, socialSecurityDataTable, toUpdate" id="button">
<f:ajax render="toUpdate"/>
</p:commandButton>
</p:column>
</p:row>
</p:panelGrid>
</p:panel>
<p:outputPanel id="toUpdate" rendered="#{dataTableSocialSecurityBean.rendered}" autoUpdate="true">
<p:panel id="socialSecurityDataTablePanel">
<p:dataTable id="socialSecurityDataTable" var="unit" value="#{dataTableSocialSecurityBean.socialSecurityList}">
<p:columns value="#{dataTableSocialSecurityBean.columns}" var="column" columnIndexVar="colIndex">
<f:facet …Run Code Online (Sandbox Code Playgroud) 我有一个使用Primefaces 3.5的dataTable,如下所示.

现在我正在使用id 43编辑第二行,如下图所示.

当我单击刻度线(最右边的列)时,将对该行进行编辑,如下图所示.

它可以很容易地注意到,国家的名字是从改变xxxx到zzz,但该国仍显得预计将被更新为相同America的Germany.
实际上,已对数据库进行了更改,但在rowEdit事件完成时它们似乎没有反映到dataTable .
要观察对国家/地区所做的更改,需要重新加载页面.仅当重新加载此页面时,它才会显示正确的数据,如下所示.

这是列出国家/地区下拉框的列.
<p:ajax event="rowEdit" listener="#{stateManagedBean.onRowEdit}" update=":form:dataTable :form:systemMessages :form:messages" process=":form:dataTable :form:systemMessages :form:messages"/>
<p:ajax event="rowEditCancel" listener="#{stateManagedBean.onRowEditCancel}" update=":form:systemMessages :form:messages" process=":form:systemMessages :form:messages"/>
<p:column headerText="Country" sortBy="#{state.country.countryName}" filterBy="#{state.country.countryName}" filterMaxLength="45">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{state.country.countryName}" />
</f:facet>
<f:facet name="input">
<p:selectOneMenu id="cmbCountryMenu" value="#{state.country.countryId}" rendered="true" editable="false" converter="#{longConverter}" converterMessage="The supplied value is incorrect." required="true" requiredMessage="Select an appropriate option." style="width:100%;">
<f:selectItems var="country" value="#{stateManagedBean.countries}" itemLabel="${country.countryName}" itemValue="${country.countryId}" …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的h:selectOneMenu设置默认值,但由于某种原因,第一项(见下文)不是第一项选择.第3项是"默认选择"项目.
<h:selectOneMenu value="#{bookBean.discountPercentage}">
<f:selectItem itemLabel="Please select a value: " noSelectionOption="true" />
<f:selectItems value="#{bookBean.paymentMethods}" var="paymentMethod"
itemValue="#{paymentMethod.discountPercentage}"
itemLabel="#{paymentMethod}" required="true"/>
<f:ajax listener="#{bookBean.setDiscountValue}"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
因此,"请选择一个值"必须是列表中的第一项(它是),并且在打开te页面时必须是选定的值,而不是.
是否可以将项目动态插入到选择的一个菜单中:
目前,用户必须转到另一个可以添加作业的页面:
然后导航回第一个视图,以使用新添加的选择项查看更新的下拉菜单.更有效的选择是允许用户在此视图中直接插入,然后在下拉列表中选择它.
selectonemenu ×10
jsf ×8
primefaces ×5
jsf-2 ×4
converter ×3
enums ×1
java ×1
java-ee-6 ×1
panel ×1
validation ×1