1

我有以下内容h:selectOneRadio

<h:selectOneRadio id="#{prefix}_rating" value="#{examinationPanel.tempResult}" >
<f:selectItems value="#{examinationPanel.options}"></f:selectItems>
</h:selectOneRadio>

然后支持 bean 正在加载基于一些用户偏好的选项:

public List<SelectItem> loadOptions (Set<ResultEnum> possibleResults){
    List<SelectItem> options = new ArrayList<SelectItem>();
    for(ResultEnum result:possibleResults){
        SelectItem option = new SelectItem(result,messages.getString(result.name()));
        options.add(option);
    }
    return options;
}

如何为单选组中的选项定义快捷方式?例如,输入“1”选择第一个选项,输入“2”选择第二个,依此类推...

提前致谢!附言。我正在使用 Jsf 1.2、Richfaces、Primefaces 和 Facelets。

4

3 回答 3

3

这不是默认内置的。您最好的方法是使用 JavaScript。将函数附加到 的keypress事件<body>,检查keyCode按下的键的 并相应地更改selected下拉菜单的项目。使用jQuery只需几行就可以做到这一点。这是一个SSCCE,只需复制'n'paste'n'运行它。

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2461588</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('body').keypress(function(e) {
                    var index = parseInt(String.fromCharCode(e.keyCode));
                    if (0 < index && index < 10) {
                        $('#dropdown option').eq(index - 1).attr('selected', true);
                    }
                });
            });
        </script>
    </head>
    <body>
        <select id="dropdown">
            <option>option1</option>
            <option>option2</option>
            <option>option3</option>
            <option>option4</option>
            <option>option5</option>
            <option>option6</option>
            <option>option7</option>
            <option>option8</option>
            <option>option9</option>
        </select>
    </body>
</html>

如果你想支持 10 个或更多项目,你需要维护一个按键堆栈,立即应用它并引入一个超时来重置堆栈(1 秒?)。

于 2010-03-17T11:22:40.883 回答
2

您可以调查是否<rich:hotKey>有帮助。简而言之,它可以让您定义键盘快捷键,但可能需要一些 jQuery 知识。

于 2010-03-17T11:49:47.250 回答
2

PrimeFaces hotKey 也可以提供帮助。

于 2010-03-23T10:48:00.810 回答