a4j:commandLink 在列表内时不起作用

发布于 2024-12-14 19:22:15 字数 273 浏览 2 评论 0原文

参考这个问题 h:commandLink 在列表内时不起作用

我有同样的问题在我的应用程序中。我想尝试 ViewScoped bean,但由于使用 Spring 2.0,我没有机会将我的 bean 放入 View Scope 中。任何其他解决方法,我可以尝试。

如果你能给我一个提示,那就太好了。

Reffering to this Question
h:commandLink not working when inside a list

I have the same Problem in my Application. I would like to try a ViewScoped bean, but cause using Spring 2.0 I dont have the chance to place my bean into View Scope. Any other workarounds, I could try.

Would be nice if u can give me a hint.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

数理化全能战士 2024-12-21 19:22:15

您可以将视图范围移植到 spring:

package com.yourdomain.scope;

import java.util.Map;
import javax.faces.context.FacesContext;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.config.Scope;

public class ViewScope implements Scope {

    public Object get(String name, ObjectFactory objectFactory) {
        Map<String,Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();

        if(viewMap.containsKey(name)) {
            return viewMap.get(name);
        } else {
            Object object = objectFactory.getObject();
            viewMap.put(name, object);

            return object;
        }
    }

    public Object remove(String name) {
        return FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(name);
    }

    public String getConversationId() {
        return null;
    }

    public void registerDestructionCallback(String name, Runnable callback) {
        //Not supported
    }

    public Object resolveContextualObject(String key) {
        return null;
    }
}

在 spring 配置文件中注册新范围

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    <property name="scopes">
        <map>
            <entry key="view">
                <bean class="com.yourdomain.scope.ViewScope"/>
            </entry>
        </map>
    </property>
</bean>

,然后将其与您的 bean 一起使用

@Component
@Scope("view")
public class MyBean {

    ...

}

You can port the view scope to spring:

package com.yourdomain.scope;

import java.util.Map;
import javax.faces.context.FacesContext;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.config.Scope;

public class ViewScope implements Scope {

    public Object get(String name, ObjectFactory objectFactory) {
        Map<String,Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();

        if(viewMap.containsKey(name)) {
            return viewMap.get(name);
        } else {
            Object object = objectFactory.getObject();
            viewMap.put(name, object);

            return object;
        }
    }

    public Object remove(String name) {
        return FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(name);
    }

    public String getConversationId() {
        return null;
    }

    public void registerDestructionCallback(String name, Runnable callback) {
        //Not supported
    }

    public Object resolveContextualObject(String key) {
        return null;
    }
}

Register the new scope in spring configuration file

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    <property name="scopes">
        <map>
            <entry key="view">
                <bean class="com.yourdomain.scope.ViewScope"/>
            </entry>
        </map>
    </property>
</bean>

And than use it with your bean

@Component
@Scope("view")
public class MyBean {

    ...

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文