JSF вызывают отступающий бобовый метод и повторно представляют компоненты на клавише ENTER

У меня есть таблица данных с как поля поиска. Я хочу, чтобы метод на отступающем бобе был вызван, когда клавиша ENTER нажимается, а также DataTable, который будет повторно представлен.

Мой подход до сих пор только работает в IE 6, и 7, не в И следующие. Это - inputText:

<h:inputText
 value="#{applicantProductListBean.applicantNameFilterValue}"
 id="applicantNameFilterValue" onkeypress="submitByEnter(event)">
</h:inputText>

и это - метод JavaScript, который я вызываю:

 function submitByEnter(e){
 if(e.keyCode==13){
      // alert("Enter was pressed");
      e.returnValue=false;
      e.cancel=true;
      document.getElementById("applicantProductListForm:refreshButton").click();
 } 
}

Как Вы видите, метод JavaScript нажимает на обновление кнопки, которое существует на странице:

<a4j:commandButton value="Refresh" id="refreshButton"
 action="#{applicantProductListBean.refreshData}"
 image="/images/icons/refresh48x48.gif"
 reRender="table, scroller">
</a4j:commandButton>

refreshData метод ничего не возвращает. Как сказано прежде, это только работает в IE 6 и IE 7.

Кто-либо знает, почему это не работает в FF?

Альтернативой, которую я рассматривал, был HotKey, который может действительно поймать событие, ВХОДЯТ, но это может только вызвать Javascript, таким образом, это не является соответствующим.

Надлежащий путь состоит в том, чтобы сделать это через RichFaces или простой JSF?

Удачи!

ОБНОВЛЕНИЕ:

Немного измененный ответ BalusC, сценарий, который работы:

if (event.preventDefault) {
// Firefox
event.preventDefault(); 
} else {
// IE 
event.returnValue = false; 
}
5
задан Markos Fragkakis 23 February 2010 в 13:00
поделиться

2 ответа

Попробуйте заменить блок JS на:

function submitByEnter(e){
    if (e.keyCode == 13) {
        e.preventDefault();
        document.getElementById("applicantProductListForm:refreshButton").click();
    } 
}

или лучше,

function submitByEnter(e){
    if (e.keyCode == 13) {
        document.getElementById("applicantProductListForm:refreshButton").click();
        return false;
    } else {
        return true;
    }
}

и входной onkeypress на

onkeypress="return submitByEnter(event)"

. Если это не сработает, запустите отладчик JS Firebug , чтобы проверить, ведет ли код JS ожидаемое поведение.

4
ответ дан 15 December 2019 в 00:59
поделиться

У меня сработало следующее:

<h:panelGrid onkeypress="searchByEnterAndReturn(event)">
    <b:aCustomComponent value="#{evolutionBackingAction.value}" id="someID"/>
</h:panelGrid>

<a4j:commandButton value="Search Now" action="search" id="searchButton"/>

<script type="text/javascript">
    function searchByEnterAndReturn(e){ 
        if(e.keyCode==13){
            document.getElementById("generalForm:pageHeader:searchButton").click(); 
        }  
     }
</script>

Это работает, но чтобы найти идентификатор моей кнопки поиска, мне пришлось искать в исходном коде моей страницы, так как сам идентификатор searchButton не мог быть найден!

Я мог бы сделать это на customComponent, но у меня есть контроль над исходным кодом этого компонента, а метод onkeypress не реализован.

0
ответ дан 15 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: