当前位置: 首页 > 知识库问答 >
问题:

p:commandLink内部的f:setPropertyActionListener不会将属性值设置为目标请求范围的bean

邢烨烨
2023-03-14

我正在尝试使用

<h:form id="form" prependId="true">
    <p:panel id="dataPanel" closable="false" toggleOrientation="horizontal" toggleable="true" style="border: none; text-align: center;">
        <p:dataGrid id="dataGrid" value="#{productDetailsManagedBean}" var="row" rowIndexVar="rowIndex" rows="4" first="0" columns="1" paginator="true" paginatorAlwaysVisible="false" pageLinks="10" lazy="true" rowsPerPageTemplate="5,10,15">

            <p:commandLink process="@this">
                <h:outputText styleClass="ui-icon ui-icon-search" style="margin:0 auto;" />
                <!--row.subCatName is correctly retrieved here.-->
                <f:setPropertyActionListener value="#{row.subCatName}" target="#{productDetailsManagedBean.subCatName}" />
            </p:commandLink>

        </p:dataGrid>
    </p:panel>
</h:form>

相应的JSF托管bean如下所示。

@ManagedBean
@RequestScoped
public final class ProductDetailsManagedBean extends LazyDataModel<SubCategory>
{
    public ProductDetailsManagedBean() {}

    @EJB
    private final ProductDetailsBeanLocal productService=null;
    private String subCatName;

    public String getSubCatName() {
        return subCatName;
    }

    public void setSubCatName(String subCatName) {
        System.out.println("setSubCatName() called. : "+subCatName); //Never invoked.
        this.subCatName = subCatName;
    }

    //The following methods are not needed to be reviewed.

    @Override
    public List<SubCategory> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters)
    {
        int rowCount = productService.rowCount().intValue();
        setRowCount(rowCount);
        return productService.getList(first, pageSize);
    }
}

当<代码>

我在这里忽略了什么?

我使用的是Mojara 2.2.5和PrimeFaces 4.0。

的进程属性

编辑:

当受管bean的范围从< code>@RequestScoped更改为< code>@ViewScoped时,这是可行的。这应该也适用于< code > @ request scoped bean。我到底做错了什么?这是预期的行为吗?

共有1个答案

司马同
2023-03-14

这确实需要比请求范围更高的范围才能工作(在这种情况下,至少需要一个视图范围的bean)。请看这个回答。

 类似资料:
  • 每当切换时,我需要设置一个布尔字段。我尝试了以下代码,但该字段从未由f:setPropertyActionListener设置,尽管p:ajax listener在切换时被调用。我尝试了以下代码。 但是,当我尝试修改代码如下,然后字段被成功设置: 我想问: 为什么第一条路不起作用? 它是坏的附加多个到单亲如第二种方式?

  • 问题内容: 我有一个需要向Internet上的系统发出SOAP客户端请求的应用程序,因此它需要通过我们的HTTP代理。 可以通过设置系统范围的值(例如系统属性)来做到这一点: 或通过设置默认的ProxySelector(也是系统范围的设置): 如果其他子系统可能希望通过不同的HTTP代理或没有任何代理来访问Web服务器,那么这两个都不是明智的选择。使用可以让我配置哪些连接使用代理,但是对于大型应用

  • 我有一个基于LazyDataModel的Primeface DataTable。我成功地在表中加载了数据,但我无法使用setProperty tyActionListener在对话框中显示选定的项目,也无法编辑行。我正在使用请求范围,我注意到这个问题似乎在会话范围内得到解决,但我宁愿使用前者(视图范围甚至不会在表中加载数据)。我已经尝试覆盖getRowData和getRowKey方法,但它们甚至没

  • 问题内容: 我有一个User类: 和一个控制器类: 我使会话无效,以便下次我进入/ users时,我得到另一个用户。由于用户的会话范围,我期望使用其他用户,但是我得到的是同一用户。我在调试模式下进行了检查,它与内存中的对象ID是相同的。我的bean声明为: 我是春季新手,所以我显然做错了什么。我希望每个会话有一个User实例。怎么样? 问题答案: 这是预期的行为。当标记带有代理的bean时,将为其

  • 问题 在你解析一个Document之后可能想修改其中的某些属性值,然后再保存到磁盘或都输出到前台页面。 方法 可以使用属性设置方法Element.attr(String key, String value), 和Elements.attr(String key, String value). 假如你需要修改一个元素的class 属性,可以使用Element.addClass(String clas

  • 从WebSocketendpoint,我尝试调用单例服务。但是我无法使用来自WebSocket的请求或会话范围。 谢谢你的帮助!