小编Xav*_*ois的帖子

将额外参数传递给f:ajax onevent函数

在我的JSF 2.0(在JBoss AS 7上)项目中,我想在我的ajax提交的表单上显示在开始和完成阶段触发的一个小图标状态,让最终用户知道某些事情仍在发生.

这里的主要表面没用p:ajaxStatus,因为我想在我的页面中的不同位置有许多不同的图标.

我在这个问题中找到了一些解决方案:" 如何在同一输入中显示不同的ajax状态? ",但我仍然有一个问题:为了使我的javascript函数可重用,我需要为调用提供额外的参数.

我做了这样的事情:

<h:commandLink value="do something boy!">
    <f:ajax render="@form" execute="@form" listener="#{myBean.doStuff}"
        onevent="showProgress" />
    <f:param name="extraParam" value="extraValue" />
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)

我可以看到通过请求发送到服务器的参数"extraParam",但在我的javascript showProgress方法中,我无法通过唯一给定的参数恢复它.

所以我的问题是:我可以f:ajax onevent通过f:param(或者可能f:attribute或其他)向我的javascript方法提供一个额外的参数吗?

javascript ajax jsf-2

19
推荐指数
1
解决办法
2万
查看次数

如何部分重新加载ui:重复?

我们有一个基于JBoss 7.1构建的Web应用程序,包含JSF2和Primefaces 3.3.

在我们的一个页面上,ui:repeat显示了10个项目; 然后用户可以点击某种"显示更多"按钮,并通过ajax显示另外10个项目.用户可以单击"显示更多"按钮,直到没有更多项目显示.注意:这不是分页,每次单击"显示更多"时显示的列表会变长.

实际上,当用户点击按钮时,服务器返回旧项和新项,而JSF的客户端每次都必须通过jQuery重建整个转发器.

我们希望找到更好,更高效的解决方案.旧项目在n-1n调用之间不会发生变化,因此如果服务器只能通过ajax返回10个新项目,那么效率会更高.

在JSF2中有可能吗?JSF似乎并不真正符合这种递归渲染.唯一可以帮助我们的组件是TreeNode组件,但它看起来有点像黑客: - /

java jquery jsf primefaces jsf-2

18
推荐指数
1
解决办法
2126
查看次数

在Android上获取OAuth2令牌时UNREGISTERED_ON_API_CONSOLE

我们在Android(Jellybean和更高版本)下,我们有一个应用程序需要使用OAuth2与Google进行身份验证.

我简化了登录活动,但它看起来像这样:

AccountManager mAccountManager;
// [...]
Account account = new Account("myEmail@gmail.com", "com.google");
// same with professional email managed by Google as myEmail@myDomain.com
// real code recovers accounts with mAccountManager.getAccountsByType("com.google")
mAccountManager = AccountManager.get(getBaseContext());
mAccountManager.getAuthToken(account, "oauth2:https://www.googleapis.com/auth/userinfo.email", null, MyActivity.this, new AccountManagerCallback<Bundle>() {
    @Override
    public void run(AccountManagerFuture<Bundle> accountManagerFuture) {
        try {
            String token = accountManagerFuture.getResult().getString(AccountManager.KEY_AUTHTOKEN);
            // exception occurs here
            // [...]
        } catch (Exception e) {
            Log.e("account", "exception occurs", e);
        }
    }
}, null);
Run Code Online (Sandbox Code Playgroud)

当我们调用时accountManagerFuture.getResult(),会触发此异常:

android.accounts.AuthenticatorException: UNREGISTERED_ON_API_CONSOLE
    at android.accounts.AccountManager.convertErrorToException(AccountManager.java:2024)
    at android.accounts.AccountManager.access$400(AccountManager.java:144)
    at …
Run Code Online (Sandbox Code Playgroud)

android google-api oauth-2.0

13
推荐指数
3
解决办法
2万
查看次数

如何设置视图超时?

在我们的JBoss 7.1.1上的JSF2项目中,我们定义了一个会话超时web.xml,它工作得很好.

但是,有时候我们会看到视图过期,导致像这样的错误,即使会话仍然存在:

javax.faces.application.ViewExpiredException: viewId:/... - View /... could 
not be restored.
Run Code Online (Sandbox Code Playgroud)

我们在哪里可以设置视图超时,就像我们为会话所做的那样?或者视图是否由其他内容引起?

session timeout view jsf-2

10
推荐指数
1
解决办法
5954
查看次数

为什么我们必须在扩展的PersistenceContext中手动flush()EntityManager?

在我们的J2EE应用程序中,我们使用EJB-3有状态bean来允许前端代码创建,修改和保存持久性实体(通过JPA-2管理).

它看起来像这样:

@LocalBean
@Stateful
@TransactionAttribute(TransactionAttributeType.NEVER)
public class MyEntityController implements Serializable
{   
    @PersistenceContext(type = PersistenceContextType.EXTENDED)
    private EntityManager em;

    private MyEntity current;

    public void create()
    {
        this.current = new MyEntity();
        em.persist(this.current);
    }

    public void load(Long id)
    {
        this.current = em.find(MyEntity.class, id);
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    public void save()
    {
        em.flush();
    }
}
Run Code Online (Sandbox Code Playgroud)

非常重要的是,为了避免过早提交,只有save()方法在一个事务中,所以如果我们调用create(),我们不会在数据库中插入任何内容.

奇怪的是,在该save()方法中,我们必须调用em.flush()才能真正命中数据库.事实上,我试过并发现我们也可以打电话em.isOpen()或者em.getFlushMode()说"与em相关".

我不明白这一点.就像save()在事务中一样,我认为在方法结束时,事务将被提交,因此持久性实体管理器会自动刷新.为什么我必须手动冲洗它?

谢谢,泽维尔

java persistence ejb jpa flush

9
推荐指数
1
解决办法
2万
查看次数

Solr:使用EdgeNGramFilterFactory进行精确短语查询

在Solr(3.3)中,是否可以通过字母逐字母搜索EdgeNGramFilterFactory并且对短语查询敏感?

例如,我正在寻找一个字段,如果包含"contrat informatique",将在用户输入时找到:

  • contrat
  • INFORMATIQUE
  • 对照
  • Informa公司
  • "contrat informatique"
  • "contrat info"

目前,我做了这样的事情:

<fieldtype name="terms" class="solr.TextField">
    <analyzer type="index">
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
    </analyzer>
    <analyzer type="query">
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
    </analyzer>
</fieldtype>
Run Code Online (Sandbox Code Playgroud)

...但是短语查询失败了.

当我在solr admin中查看模式分析器时,我发现"contrat informatique"生成了以下标记:

[...] contr contra contrat in inf info infor inform [...]
Run Code Online (Sandbox Code Playgroud)

因此查询使用"contrat in"(连续令牌),但不使用"contrat inf"(因为这两个令牌是分开的).

我很确定任何类型的词干都可以用短语查询,但我找不到正确的过滤器标记器来使用之前EdgeNGramFilterFactory.

solr tokenize phrase

7
推荐指数
2
解决办法
1万
查看次数

表现如何f:查看许多已定义的资源库合同?

我们试图将JSF 2.2中<f:view contracts="xxx" />功能与许多同时合同一起使用,称为"contract1,contract2".

在我们的contract1中,我们有一个文件style1.css,在我们的contract2中,a style2.css.我们通过<h:outputStylesheet />标签在视图中包含两者.

如果我只contracts="contract1"在视图中使用,JSF日志比style2.css缺少,这是合乎逻辑的.

如果我使用contracts="contract1,contract2",JSF导入两个style1.cssstyle2.css,但有一个错误的URL(它使用&con=contract1而不是&con=contract2获取资源).

这是一个错误吗?这是正常的吗?我找不到任何关于使用许多同时合同的文件.

jsf jsf-2.2 resource-contracts

7
推荐指数
1
解决办法
601
查看次数

ViewScoped bean的内存泄漏?

在我们 在JBoss 7.1.1上的JavaEE6项目(EJB3,JSF2)中,似乎我们有SeamFaces的内存泄漏.@ViewScoped

我们制作了一个小原型来检查这个事实:

  • 我们使用JMeter来调用页面200次;
  • 该页面包含并调用一个注入有状态EJB的viewscoped bean;
  • 我们将会话超时修复为1分钟.

在测试结束时,我们使用VisualVM检查内存的内容,这里我们得到了:

  • 使用@ViewScopedbean,我们仍然可以获得200个有状态实例MyController- 并且该@PreDestroy方法永远不会被调用;
  • 使用@ConversationScopedbean,@preDestroy方法称为会话结束,然后我们得到一个干净的内存.

我们是否严重使用视图范围,还是真的是一个错误?


这是XHTML页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"   
   xmlns:s="http://jboss.org/seam/faces">
   <f:metadata>
        <f:viewParam name="u" value="#{myBean.uselessParam}" />
        <s:viewAction action="#{myBean.callService}" />
   </f:metadata>
   <h:body >
        <f:view>
        </f:view>
   </h:body>    
</html>
Run Code Online (Sandbox Code Playgroud)

现在包含的bean myBean.对于@ConversationScoped变体,所有注释的部分都是未注释的.

@ViewScoped
// @ConversationScoped
@Named
public class MyBean implements Serializable 
{
    @Inject
    MyController myController; …
Run Code Online (Sandbox Code Playgroud)

memory-leaks cdi seam3 jsf-2 view-scope

6
推荐指数
2
解决办法
6697
查看次数

OutOfMemoryError:在 WildFly 中使用 websockets 时的直接缓冲内存

在我们的 WildFly 18 服务器上一段时间后,在生产中,我们遇到了这个错误:

[org.xnio.listener] (default I/O-1) XNIO001007: A channel event listener threw an exception: 
java.lang.OutOfMemoryError: Direct buffer memory
    at java.base/java.nio.Bits.reserveMemory(Bits.java:175)
    at java.base/java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:118)
    at java.base/java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:317)
    at org.jboss.xnio@3.7.3.Final//org.xnio.BufferAllocator$2.allocate(BufferAllocator.java:57)
    at org.jboss.xnio@3.7.3.Final//org.xnio.BufferAllocator$2.allocate(BufferAllocator.java:55)
    at org.jboss.xnio@3.7.3.Final//org.xnio.ByteBufferSlicePool.allocateSlices(ByteBufferSlicePool.java:162)
    at org.jboss.xnio@3.7.3.Final//org.xnio.ByteBufferSlicePool.allocate(ByteBufferSlicePool.java:149)
    at io.undertow.core@2.0.27.Final//io.undertow.server.XnioByteBufferPool.allocate(XnioByteBufferPool.java:53)
    at io.undertow.core@2.0.27.Final//io.undertow.server.protocol.framed.AbstractFramedChannel.allocateReferenceCountedBuffer(AbstractFramedChannel.java:549)
    at io.undertow.core@2.0.27.Final//io.undertow.server.protocol.framed.AbstractFramedChannel.receive(AbstractFramedChannel.java:370)
    at io.undertow.core@2.0.27.Final//io.undertow.websockets.core.AbstractReceiveListener.handleEvent(AbstractReceiveListener.java:38)
    at io.undertow.core@2.0.27.Final//io.undertow.websockets.core.AbstractReceiveListener.handleEvent(AbstractReceiveListener.java:33)
    at org.jboss.xnio@3.7.3.Final//org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
    at io.undertow.core@2.0.27.Final//io.undertow.server.protocol.framed.AbstractFramedChannel$FrameReadListener.handleEvent(AbstractFramedChannel.java:950)
    at io.undertow.core@2.0.27.Final//io.undertow.server.protocol.framed.AbstractFramedChannel$FrameReadListener.handleEvent(AbstractFramedChannel.java:931)
    at org.jboss.xnio@3.7.3.Final//org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
    at org.jboss.xnio@3.7.3.Final//org.xnio.conduits.ReadReadyHandler$ChannelListenerHandler.readReady(ReadReadyHandler.java:66)
    at org.jboss.xnio.nio@3.7.3.Final//org.xnio.nio.NioSocketConduit.handleReady(NioSocketConduit.java:89)
    at org.jboss.xnio.nio@3.7.3.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:591)
Run Code Online (Sandbox Code Playgroud)

我们通过 jxray 检查了 JVM 转储,看来 websockets 是罪魁祸首:

jxray 报告显示了 websockets 使用的大量 DirectByteBuffer

事实上,我们的 websocket 有点简单:

@ApplicationScoped
@ServerEndpoint(value = "/ws/messenger/{accountId}")
public class MessengerSocket implements Serializable
{
    private static final …
Run Code Online (Sandbox Code Playgroud)

java out-of-memory websocket wildfly undertow

6
推荐指数
1
解决办法
1263
查看次数

主从solr 3.6服务器的备份策略

我们正在使用solr 3.6复制和2台服务器 - 服务器和从服务器 - 我们目前正在寻找干净备份的方法.

正如维基所说的那样,我们可以使用HTTP命令来创建主服务器的快照,如下所示:http://myMasterHost/solr/replication?command=backup

但我们仍然有一些问题:

  • backup复制索引文件的经典shell脚本上的命令有什么好处?

  • 该命令仅备份索引; 是否可以复制spellchecker文件夹?它需要吗?

  • 我们可以在应用程序运行时创建快照,所以虽然有潜在的索引更新吗?

  • 当我们必须从备份恢复服务器时,我们必须对从属设备做什么?
    • 只是复制其索引文件夹中的快照,并删除该replication.properties文件(或不删除)?
    • 通过HTTP命令请求fetchindex http://mySlave/solr/replication?command=fetchindex
    • 只是清空slave索引文件夹,以强制从master完全复制?

backup replication solr

5
推荐指数
1
解决办法
1788
查看次数