我需要在onclick
上的h:outputLink
事件后将整数传递给JSF支持bean。
重要提示:我不能使用f:param将值作为请求参数传递给naviagating页面,因为我阻止了h:outputlink的默认onclick行为。 控件而不是导航到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
时,需要将该项的id传递给JSF以在dialog
中呈现适当的内容。
如上所示如果我可以在remotecommand
中获取项目的ID,我可以通过setPropertyActionListener
答案 0 :(得分: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>
Bean -
@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>
答案 1 :(得分:0)
检查this。我和你有同样的问题,但我在阅读了BalusC的链接后解决了这个问题。
简而言之,就是你在说什么:
f:属性: 您可以使用 h:commandLink 和 h:commandButton 标记还使用 actionListener 属性触发辅助bean的方法。使用此方法,您还可以使用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>
可以使用父UI组件的 getAttributes ()来检索这些属性,然后由传递的 ActionEvent 检索>的ActionListener 即可。
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”,“render”等。