Jaq*_*har 1 jsf selectonemenu primefaces alt-key
在Glassfish 4.1上使用PF 5.1,JSF 2.2.7.
我有一个简单的例子selectOneMenu:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Test</title>
</h:head>
<h:body>
<h:form>
<p:selectOneMenu value="#{testBean.text}">
<p:ajax listener="#{testBean.test()}" update="outputpanel"/>
<f:selectItem itemLabel="1" itemValue="1"/>
<f:selectItem itemLabel="2" itemValue="2"/>
<f:selectItem itemLabel="3" itemValue="3"/>
</p:selectOneMenu>
<p:outputPanel id="outputpanel">
#{testBean.text}
</p:outputPanel>
</h:form>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
豆:
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
@Named
@ViewScoped
public class TestBean implements Serializable
{
private String text;
public String getText() {
return text;
}
public void setText(String text) {
System.out.println("settext: " + text);
this.text = text;
}
public void test() {
System.out.println("test called");
}
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作,除非下拉有焦点,我在Windows上按ALT或在Mac上按CMD它将调用监听器并重置下拉列表.当下拉列表不是默认值(当它已经在2或3时)时会发生这种情况.这意味着我不能例如按ALT + TAB来检查另一个打开程序中的内容 - 当我回来时它将被重置.
为什么这种邪恶的行为以及如何避免它呢?我宁愿不按ALT来触发event="change"并重置组件.
这是与之关联的JavaScript中的错误<p:selectOneMenu>.它不区分控制键(Alt,Ctrl从字符键等)( ,A,,B 通过键盘过滤菜单项时,等).12
基本上,在文件中的PrimeFaces.widget.SelectOneMenu对象定义中primefaces.js,on("keyup.ui-selectonemenu", function...)必须替换为.on("keypress.ui-selectonemenu", function...).keypress仅在按下字符键时才会触发该事件.这样switch也可以删除整个检查.
获取一份副本/javax.faces.resource/primefaces.js.xhtml?ln=primefaces并将其保存为 /resources/primefaces/primefaces.js您的webapp.WAR中的资源比JAR中的资源具有更高的加载优先级.
按Ctrl + F keyup.ui-selectonemenu并将其替换为keypress.ui-selectonemenu.
保存.
利润.
与此同时,向PrimeFaces人员报告此问题,以便他们能够正确地解决这个问题.修复程序发布后,您可以删除自定义脚本.
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |