Rich: отображение контекстного меню после повторной визуализации в контекстном меню

Я использую Richfaces 3.3.3

Можно ли как-то перерендерить контекстное меню и после его повторного рендеринга отобразить его?

В настоящее время я использую a4j:support с событием onmouseover для повторной визуализации контекстного меню в соответствии с некоторыми значениями, прикрепленными к указанному компоненту.

Когда пользователь затем щелкает правой кнопкой мыши, я отображаю контекстное меню, используя rich:componentControl.

Я хотел бы сделать что-то вроде этого.

<a4j:support event="oncontextmenu" reRender="contextMenu" oncomplete="#{rich:component('contextmenu')}.show()">
    <a4j:actionparam ...../>
</a4j:support>

person gadeynebram    schedule 07.11.2012    source источник


Ответы (1)


Это трюк, который вы можете использовать для этого. Однако повторный рендеринг всего компонента rich:contextMenu не очень полезен, потому что при повторном рендеринге он исчезает. Однако вы можете reRender каждый элемент в меню. Это не скроет contextMenu. Вот как вы можете это сделать.
Обратите внимание, что элемент div с идентификатором "my_div" — это компонент, внутри которого следует щелкнуть правой кнопкой мыши.

<h:form id="frm" style="border:solid red; height:500px;width:500px;">
<s:div id="my_div" style="border:solid; height:200px;width:200px;">
Right click inside of me.
</s:div>

<rich:contextMenu target="my_div" submitMode="client" showEvent="click"
id="contextMenu" >
<rich:menuItem value="Item 1" id="it1"/>
<rich:menuItem value="Item 2" id="it2"/>
</rich:contextMenu>
< br/> <a4j:jsFunction ajaxSingle="true" name="showContextMenu" id="jsFunc"
reRender="it1,it2" />
</h:form>

Добавьте теги <script> в теги <head> и поместите этот JS.

<script>
function validateComponent() {
showContextMenu();
}
window.onload = function() {
#{rich:element('my_div')}.oncontextmenu = validateComponent;
}
</script>

person prageeth    schedule 07.11.2012
comment
Привет, спасибо за ваш ответ! Выглядит многообещающе. Однако я не могу использовать его полностью, потому что моя ситуация немного отличается. У меня есть несколько div, по которым можно щелкнуть, и их идентификаторы уникальны, но вызываются динамически. Попробую применить ваш пример. Моя первая попытка не удалась, контекстное меню появляется, но содержимое не перерендеривается, теперь я использовал идентификаторы пунктов меню для перерендеринга. - person gadeynebram; 08.11.2012
comment
Независимо от того, есть ли у вас дополнительные DIV. Вы можете соответствующим образом изменить код. Однако, если у вас все еще нет успеха, опубликуйте свой упрощенный код, чтобы я мог найти, могу ли я вам помочь. - person prageeth; 09.11.2012