我最近更新了Primefaces从3.4到3.4.2,现在我在一些有p:selectOneMenu组件的页面上遇到了问题.我在JavaScript控制台中看到错误说:TypeError: e.offset(...) is undefined.页面加载时会立即记录此错误.
有谁知道什么是问题?
我正在尝试使用Primefaces 5.2 selectOneMenu来显示图像及其文件名.这就是我的xhtml目前的样子:
<h:form>
<h:panelGrid id="createPanelGrid" columns="2">
<p:outputLabel value="Service Logo:" />
<p:selectOneMenu value="#{imageBean.selectedImage}" var="l">
<f:selectItem itemLabel="Select a logo" itemValue="" />
<f:selectItems value="#{imageBean.imageList}" var="logo" itemLabel="#{logo}" itemValue="#{logo}" />
<p:column>
<p:graphicImage value="#{imageBean.imageFolder}/#{l}" style="max-width:50px;max-height:50px;" />
</p:column>
<p:column>#{l}</p:column>
</p:selectOneMenu>
</h:panelGrid>
Run Code Online (Sandbox Code Playgroud)
ManagedBean(imageBean)有
public List<String> getImageList () {
List<String> imageList = new ArrayList<String>();
File[] files = absoluteImageFolder.listFiles();
for (File file : files) {
imageList.add(file.getName());
}
return imageList;
}
Run Code Online (Sandbox Code Playgroud)
和
private String selectedImage;
public String getSelectedImage() {
return selectedImage;
}
public void setSelectedImage(String selectedImage) {
this.selectedImage = selectedImage; …Run Code Online (Sandbox Code Playgroud) 我正在使用JSF2和PrimeFaces3.我如何编写selectOneMenu,当他更改菜单中的选项时,会调用JSF导航将用户重定向到另一个页面?
当我嵌入a p:selectOneMenu时p:dialog,它的初始宽度在Primefaces 3.4中太小.这些小部件的宽度在Primefaces 3.2中完全没问题.我需要做一个黑客来解决这个问题吗?
问题出现在Chrome中.以下示例代码演示了此问题:
<p:selectOneMenu value="A" onchange="testDialog.show()">
<f:selectItem itemLabel="Default item" itemValue="A" />
<f:selectItem itemLabel="Click here to show the dialog" itemValue="B" />
</p:selectOneMenu>
<p:dialog header="Test dialog" widgetVar="testDialog">
<p:selectOneMenu value="A">
<f:selectItem itemLabel="This one here in the dialog" itemValue="A" />
<f:selectItem itemLabel="doesn't calculate" itemValue="B" />
<f:selectItem itemLabel="its width" itemValue="C" />
<f:selectItem itemLabel="correctly" itemValue="D" />
</p:selectOneMenu>
</p:dialog>
Run Code Online (Sandbox Code Playgroud) 我想selectOneMenu通过托管bean或javascript 更改此选定的值:
<p:selectOneMenu id="edit-article-famille" widgetVar="editFamille"
required="true" requiredMessage="Veuillez choisir une famille"
value="#{articlesMB.selectedFamille}">
<f:selectItem itemLabel="selectionner famille" itemValue=""/>
<f:selectItems value="#{articlesMB.listFamilles}"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
我该怎么做?在primefaces用户指南中,他们没有谈到这一点.
我一直在努力调整字体大小和调整我的selectOneMenu,但我已经与它和平相处,但是在将PrimeFaces从3.2升级到3.4.2之后,selectOneMenu有一个前缀为它的间隙,这非常烦人.
PrimeFaces 3.2 selectOneMenu

PrimeFaces 3.4.2 selectOneMenu

码
<p:selectOneMenu id="Category" value="#{databaseSearch.category}" style=" font-size: 35px; height: 20px; width: 80px;">
<f:selectItem itemLabel="Machine" itemValue="Machine"/>
<f:selectItem itemLabel="Company" itemValue="Company"/>
<f:selectItem itemLabel="Contact" itemValue="Contact"/>
<f:selectItem itemLabel="Phone" itemValue="Phone"/>
<f:selectItem itemLabel="Email" itemValue="Email"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
我该怎么办 ?:(
在p:selectOneMenu中,bean中未设置loginbranchName值。在具有branchName列表的selectItems中。我正在使用侦听器从列表中选择值,但在getLoginBranchId方法中未设置值......
<h:outputLabel value="Branch Name:*" style="text-align: left;display: block;" rendered="#{loginBean.userLoggedIn}"/>
<p:selectOneMenu value="#{loginBean.loginbranchName}"
rendered="#{loginBean.userLoggedIn}"
style="width:175px;">
<f:selectItem itemLabel="Select" itemValue="0" />
<f:selectItems value="#{loginBean.branchName}" />
<p:ajax event="change" listener="#{loginBean.getLoginBranchId}"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
登录.java
public String getLoginbranchName() {
return loginbranchName;
}
public void setLoginbranchName(String loginbranchName) {
System.out.println("loginbranchName"+loginbranchName);
this.loginbranchName = loginbranchName;
}
public void getLoginBranchId()
{
System.out.println("enter into getloginbranchid");
System.out.println("loginbranchName"+loginbranchName);
int unitId=loginDAO.getLoginBranchId(loginbranchName);
System.out.println("unitId"+unitId);
}
Run Code Online (Sandbox Code Playgroud) 这是我的配置:
一些代码(我只发布了相关部分以便更清晰):
<p:selectOneMenu value="#{viewModel.selectedContact}" required="true" converter="omnifaces.SelectItemsConverter">
<p:ajax event="change" listener="#{viewModel.updateContact}" update="area"/>
<f:selectItem itemValue="#{null}" itemLabel="#{msg.no_contact}" noSelectionOption="true" />
<f:selectItems value="#{viewModel.contacts}"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
所以在这里,我们有一个简单的p:selectOneMenu包含Contact对象列表以及"无联系"选项.如果我想提交表单,则需要此字段.
在列表中选择联系人时,将updateContact调用该方法.此方法将生成将area在AJAX调用更新的页面部分中显示的数据.
如果我选择"无联系"选项,则会触发验证错误,因为此字段是必需的,因此updateContact不会调用该方法.我希望调用该方法,因为我需要重置一些数据然后隐藏area页面的部分.
我尝试过使用process="@this",immediate="true"但它不起作用.使用时immediate="true",选中Contact的不会传递给updateContact方法.
那么,在选择空值时绕过该字段验证的最佳方法是什么?
我知道如何preselect <p:selectOneMenu>,在selected中value应该是from中的对象之一<f:selectItems>,但是该组件如何在后台工作,我可以更改此行为吗?
以我为例,我有一个重复的对象,实际上这是两个具有相同值的对象,但是创建了两次,并且所选对象与该对象<p:selectOneMenu>不同,<f:selectItems>并且无法识别它。我很可能会更改设计,因此它会指向同一个对象,但是如果由于遗留代码或其他原因而无法执行该操作,我该如何更改<p:selectOneMenu>它会比较对象的行为id呢?
我以为它是converter负责任的,但是当它呈现时,它不仅会进入getAsObjectmethod getAsString,所以我想这里有些不同,但是又是什么呢?
谢谢
我想创建一个JSF注册表单,其中包含所有国家/地区列表的选择菜单.我知道这很容易用Java实现,HashMap但是我不知道如何实现的棘手部分是用户从列表中选择他的国家后,第二个选择菜单与他所在国家/地区的城市一起出现?有什么有用的例子吗?
最好的祝愿.
selectonemenu ×10
primefaces ×9
jsf ×6
jsf-2 ×6
ajax ×1
dialog ×1
javascript ×1
jquery ×1
navigation ×1
required ×1