Мне нужно передать целое число компоненту поддержки JSF после события onclick
на h:outputLink
.
Важно: я не могу использовать f: param для передачи значения в качестве параметров запроса на страницу навигации, поскольку я предотвращаю поведение onclick по умолчанию для h: outputlink. Элемент управления вместо перехода к странице, определенной атрибутом href, переходит к функции javascript .
Использование снимка Primefaces 3.0M3 с JSF 2.0
Мой код следующий:
<h:outputLink id="#{item.id}" value="/itemDetails.xhtml" class="itemLink" >
#{item.name}
</h:outputLink>
<script>
$(".itemLink").click(function(event) {
showDetailsInDialog();// show the item details in dialog
event.preventDefault();// prevent the behaviour provided by href
});
</script>
<h:form>
<p:remoteCommand name="showDetailsInDialog" update="itemDetailsPanel" oncomplete="itemDetailsDialog.show()">
<f:setPropertyActionListener value="....id of the item...." target="#{itemsList.selectedItem}"/>
</p:remoteCommand>
</h:form>
У меня есть многоразовый dialog
, который отображает подробную информацию об элементе, выбранном из списка элементов. Для этого при нажатии на h:outputLink
для элемента идентификатор этого элемента должен быть передан в JSF, чтобы отобразить соответствующий контент в dialog
.
Как показано выше, если я могу получить идентификатор элемента в remotecommand
, я могу передать его соответствующему компоненту поддержки через setPropertyActionListener
2 ответа
Я думаю, вам следует использовать p:commandLink
вместо h:outputLink
следующим образом:
Посмотреть -
<h:form>
<p:commandLink value="#{item.name}" action="#{myBean.fetchItem()}" update="detailPanel" oncomplete="detailDlg.show();">
<f:setPropertyActionListener target="#{myBean.itemId}" value="#{item.id}"/>
</p:commandLink>
</h:form>
Боб -
@ManagedBean
@ViewScoped
public class MyBean {
@ManagedProperty(value="#{itemStore}")
private ItemStore itemStore;
private int itemId; //getter/setter
private Item item; //getter/setter
public void fetchItem() {
this.item = this.itemStore.getItemWithId(this.itemId);
}
Обновление:
Вы можете сделать это с помощью JQuery следующим образом:
<script>
jQuery(document).ready(function() {
jQuery(".itemLink").click(function(event){
jQuery("#itemIdHI").attr("value", jQuery(this).attr("id"));
remCom();
event.preventDefault();
});
});
</script>
<h:form prependId="false">
<h:inputHidden id="itemIdHI" value="#{myBean.itemId}"/>
<p:remoteCommand name="remCom" action="#{myBean.axnMethod()}" process="itemIdHI" update="detailPanel" oncomplete="detailDlg.show()"/>
</h:form>
Проверьте это. У меня те же проблемы, что и у вас, но я решил их после прочтения ссылки BalusC.
Короче говоря, вот о чем вы говорите:
f: attribute: с тегами h: commandLink и h: commandButton вы также можете активировать метод бин поддержки с помощью атрибута actionListener . При этом вы также можете использовать тег f: attribute для динамической передачи параметров. Вот пример:
<h:form>
<h:commandLink value="Click here" actionListener="#{myBean.action}">
<f:attribute name="attributeName1" value="attributeValue1" />
<f:attribute name="attributeName2" value="attributeValue2" />
</h:commandLink>
<h:commandButton value="Press here" actionListener="#{myBean.action}">
<f:attribute name="attributeName1" value="attributeValue1" />
<f:attribute name="attributeName2" value="attributeValue2" />
</h:commandButton>
</h:form>
Эти атрибуты можно получить с помощью getAttributes () родительского компонента пользовательского интерфейса, который, в свою очередь, может быть получен с помощью ActionEvent , переданного с помощью actionListener < / strong>.
package mypackage;
import javax.faces.event.ActionEvent;
import net.balusc.util.FacesUtil;
public class MyBean {
// Actions -----------------------------------------------------------------------------------
public void action(ActionEvent event) {
String attributeName1 = FacesUtil.getActionAttribute(event, "attributeName1");
String attributeName2 = FacesUtil.getActionAttribute(event, "attributeName2");
System.out.println("attributeName1: " + attributeName1);
System.out.println("attributeName1: " + attributeName1);
}
}
package net.balusc.util;
import javax.faces.event.ActionEvent;
public class FacesUtil {
// Getters -----------------------------------------------------------------------------------
public static String getActionAttribute(ActionEvent event, String name) {
return (String) event.getComponent().getAttributes().get(name);
}
}
Переменные attributeName1 и attributeName2 теперь должны содержать значения attributeValue1 и attributeValue2 соответственно.
Позаботьтесь о том, чтобы каждое имя атрибута было уникальным и не перезаписывало какие-либо атрибуты компонентов по умолчанию, такие как "id", "name", "value", "binding", "rendered" и т. д.
Похожие вопросы
Связанные вопросы
Новые вопросы
jsf
JavaServer Faces (JSF) - это среда представления модели-представления, обычно используемая для создания веб-приложений на основе форм HTML. Используя стандартные компоненты и набор визуализации, HTML-представления с сохранением состояния могут быть определены с помощью Facelets или JSP-тегов и могут быть привязаны к модели данных и логики приложения с помощью компонентов поддержки.