小编Emi*_*ęga的帖子

JSF 2.2内存消耗:为什么Mojarra保留了内存中最后25个视图的ViewScoped Beans?

每个会话的内存增长

使用JSF 2.2(2.2.12)和Mojarra,我们正在经历高内存消耗.在研究了我们的负载测试之后,我们发现ViewScoped Beans中的数据大小非常高(有时超过1MB).无论如何 - 当从视图导航到视图时,会话内存大小会增长和增长.我们不能在短期内减少bean的大小,因此这种行为会产生相当大的影响.

解决方案1 ​​ - 更改上下文参数(不工作)

现在 - 我们使用了Mojarra的官方上下文参数,默认情况下设置为15:

com.sun.faces.numberOfLogicalViews
com.sun.faces.numberOfViewsInSession
Run Code Online (Sandbox Code Playgroud)

将这些参数更改为较低的值对我们的负载测试中的内存消耗没有任何影响.

解决方案2 - 更改activeViewMapsSize(工作)

我们正在调试Mojarra并在以下代码中找到以下代码ViewScopeManager:

Integer size = (Integer) sessionMap.get(ACTIVE_VIEW_MAPS_SIZE);
if (size == null) {
    size = 25;
}
Run Code Online (Sandbox Code Playgroud)

保留上次访问的视图的默认大小似乎是25.看到这一点,我们实现了一个Session Listener,它将此值设置为1:

public class SetActiveViewMapsSizeSessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent event) {
        event.getSession().setAttribute(ViewScopeManager.ACTIVE_VIEW_MAPS_SIZE, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

这显然有效.由于只保留了1个视图,因此内存停止增长.

为什么25个内存中的观点?

因此,如果Session中没有定义不同的值,Mojarra会保留25个内存视图的历史记录.我找不到任何关于此的文档.有人可以解释这是为了什么?它是针对浏览器的吗?我们在JSF页面上禁用了缓存.因此浏览器将始终创建一个新视图.这不应成为我们的问题.

解决方案2是有效的方法吗?有人可以解释这种方法的缺点吗?

更新1

经过各种评论和更深入的调试后,结果证明:

  • com.sun.faces.numberOfLogicalViews 定义logicalViewMap大小,该大小仅存储(!)ui组件树的状态
  • com.sun.faces.application.view.activeViewMapsSize 定义activeViewMap的大小,它包含ViewScoped bean

当更改numberOfLogicalViews为1时,mojarra仍会跟踪过去25个视图中的所有视图范围内的bean.当你以相反的方式配置它 - numberOfLogicalViews从15 activeViewMapsSize到1时 - 由于我猜想缺少数据,因此无法正确初始化视图.我们甚至没有例外.我想理解,为什么mojarra选择设置activeViewMapsSize高于numberOfLogicalViews和不高,因为我们想调整内存消耗而不会产生不可预测的行为.

更新2 …

jsf mojarra jsf-2.2

23
推荐指数
1
解决办法
3833
查看次数

为什么这个jQuery ajax click事件多次触发?

我已经尝试解除了点击事件的绑定,但它有时会发射两次,有时是5次!! 现在有点厌倦了!

代码来自 modal.asp

$("input[name=add_associate]").live("click",function(){
    var addassociateID = $(this).attr("id")

    $.ajax({
       type: 'POST',
       url: '/data/watchlist_save.asp',
       data: {m : 'share_watchlist_add', watchListID : <%=WatchListID%>, a : addassociateID},
       async:true,
       success: function(data) {
           $(".associate_users").load("/data/sub_watch_members.asp?watchListID=<%=WatchListID%>",
           {cache:false},function() {
               $(".search_note").html(data)         
               $(this).unbind('click').bind('click',handler);                                                                                                
           })
       },
       error: function(data){
           $(".search_note").html(data)
       }
    });     
})
Run Code Online (Sandbox Code Playgroud)

更新:
基本上我调用以下代码.associate_users

<div id="associate_list">
    <div class="associate_record">
        <div class="left" style="padding:8px;"><img src="../imgs/nopic-m.png" style="width:30px;height:30px;" class="img_border" /></div>
        <div class="left" style="padding-top:15px;">5)Neil Burton</div>
        <div class="right" style="padding-top:10px;margin-right:5px;"><input type="button" class="btn-blue" name="add_associate" id="890" value="Add"></div>
        <div style="clear:both;"></div>
    </div>
    <div style="clear:both;"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

更多信息:
这只发生在我触发事件时,关闭模态对话框然后用不同的方法重新打开它watchListID

数据结构:

  • main.asp …

ajax jquery

19
推荐指数
4
解决办法
5万
查看次数

如何在填充了Array的AutoCompletetextview中查找项的位置

我有一个数组(array1 with States)AutoCompleteTextview,我在其中填充array1.当我从AutocompleteTextViewI中选择值时,state从AutoCompleteTextView下拉列表中选择一个

我想要的是从我选择的array1中获取项目的位置. 我已经试过是的.
OnClickEventAutocompelteTextView

STATE.setOnItemClickListener(new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
        String selection = (String) parent.getItemAtPosition(position);
        String num = selection;
    }
});
Run Code Online (Sandbox Code Playgroud)

这SS给我,我从下拉列表中选择的价值,但我希望得到position of the value阵列1.例如,我有一个大小为4的数组,如array1 = {A,B,C,D},如果我选择B,它应该返回我在数组中的B位置,即2.

我希望我说清楚.提前致谢.

android autocompletetextview

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

如何绘制我的UIView的单个圆角.

嗨!我想画一个圆角UIView.只有一个,其他人不能改变.

cocoa-touch uiview

17
推荐指数
1
解决办法
9062
查看次数

通过Button传递值到Php函数

在此输入图像描述

我是php的初学者,我目前正在使用管理面板(你可以看到我的管理面板页面).问题是我想通过这两个按钮传递序列号以进一步执行.但我找不到如何发送$value编辑和删除特定行.

<div id="headin2"><strong> <h3>Admin page </h3></strong></div>
<?php 
    echo "<table width=\"100%\" border=\"0\" id=\"tab\">";
    echo "<tr>";
    echo "<th id=\"td1\">Serial No</th><th id=\"td2\">Account Title</th>
              <th id=\"td3\">Email</th><th id=\"td4\">Gender</th><th id=\"td5\">city</th>
              <th id=\"td6\">Course</th><th id=\"td7\">status</th><th id=\"td8\" colspan=\"3\">Action</th>";
    echo "</tr>";

    while ( $row = mysql_fetch_array($query))
    {
        $SN = $row['SN'];
        $actitle = $row['ac_title']; 
        $email = $row['email'];
        $gender  = $row['sex']; 
        $cite = $row['city'];
        $course = $row['CRS'];
        $status  = $row['status'];  

        echo "<tr>";
        echo "<td>".$SN."</td><td>".$actitle."</td><td>".$email."</td>
                  <td>".$gender."</td><td>".$cite."</td><td>".$course."</td><td>".$status."</td>
                  <td>"."<input type=\"button\" name=\"edit\" value=\"Edit\"/>
                  <input type=\"button\" value=\"Delete\" name=\"delete\" >"."</td>";
        echo "</tr>";
    }
?>

</table>
Run Code Online (Sandbox Code Playgroud)

php

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

Espresso:AppNotIdleException

当我登陆页面时,我不断收到此错误.有什么可以解决这个问题?

android.support.test.espresso.AppNotIdleException: Looped for 4539 iterations over 60 SECONDS. The following Idle Conditions failed .
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:580)
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:92)
at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:56)
at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:184)
at android.support.test.espresso.ViewInteraction.check(ViewInteraction.java:158)
Run Code Online (Sandbox Code Playgroud)

android android-espresso

5
推荐指数
2
解决办法
2997
查看次数

WIX - 如何使用删除文件

我们有多个配置文件。根据所选的环境,将复制正确的文件,并删除其余文件。
我正在使用RemoveFile,但这不会删除任何内容,或者可能是我没有正确使用它。*.config有人可以举一个在[INSTALLDIR]复制所有文件后在安装过程中删除的示例吗?

wix wix3.5 wix3.6

4
推荐指数
1
解决办法
9709
查看次数

序列化期间没有有效的构造函数

在将扩展加载到程序期间,我遇到了一个主要问题.因为没有有效的构造函数,我得到一个异常.

问题在于:

 ekstensja =  (ArrayList<Dydaktyk>) ois.readObject();
Run Code Online (Sandbox Code Playgroud)

我得到类似的东西:

java.io.InvalidClassException: Dydaktyk; no valid constructor
    at java.io.ObjectStreamClass$ExceptionInfo.newInvalidClassException(Unknown Source)
    at java.io.ObjectStreamClass.checkDeserialize(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at java.util.ArrayList.readObject(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
    at java.io.ObjectInputStream.readSerialData(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at Dydaktyk.wczytajEkstensje(Dydaktyk.java:81)
    at Dydaktyk.<clinit>(Dydaktyk.java:69)
    at java.io.ObjectStreamClass.hasStaticInitializer(Native Method)
    at java.io.ObjectStreamClass.computeDefaultSUID(Unknown Source)
    at java.io.ObjectStreamClass.access$100(Unknown Source)
    at java.io.ObjectStreamClass$1.run(Unknown Source)
    at java.io.ObjectStreamClass$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at …
Run Code Online (Sandbox Code Playgroud)

java serialization load runtime-error

4
推荐指数
1
解决办法
8264
查看次数

android,我试着找到什么类型的号码(来自联系人)(移动,家庭,工作)

String tmp = txtPhoneName.getText().toString();
ContentResolver cr = getContentResolver(); 
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,  "DISPLAY_NAME = '" + tmp + "'", null, null);

if (cursor.moveToFirst()) {     
    String contactId = Cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
    Cursor phones = cr.query(Phone.CONTENT_URI, null, Phone.CONTACT_ID + " = " + contactId, null, null); 

    while (phones.moveToNext()) {   
        String number = phones.getString(phones.getColumnIndex(Phone.NUMBER));
        number1 = number;
        int type = phones.getInt(phones.getColumnIndex(Phone.TYPE));  

        switch (type) {    
            case Phone.TYPE_HOME: 
            // do something with the Home number here...  
                break;          
            case Phone.TYPE_MOBILE:    
                // do something with the Mobile number …
Run Code Online (Sandbox Code Playgroud)

android

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

从primeface的selectOneMenu中选择项目不起作用

我从a获取所选项目时遇到问题selectOneMenu.
这是我的JSF代码:

<h:form id="mainfrm">   
    <h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">  
        <h:outputText value="Basic Usage: " />  
        <p:selectOneMenu id="domaine" value="#{projet.currentDomaines}">  
            <f:selectItem itemLabel="Select One" itemValue="" />  
            <f:selectItems value="#{projet.initDomaines()}"  var="d" itemValue="#{d}" itemLabel="#{d.libelleDomaine}" /> 
            <p:ajax update="formEquipe" process="mainfrm" event="change" />
        </p:selectOneMenu>
     </h:panelGrid>     

</h:form>  

<h:form id="formEquipe">  
    <h:panelGrid id="display" columns="2" cellpadding="4">  
        <f:facet name="header">  
            <p:graphicImage value="/images/cars/xxxx.jpg"/>  
        </f:facet>  

        <h:outputText value="Domaine name :" />  
        <h:outputText value="#{projet.currentDomaines.libelleDomaine}"/>  

        <h:outputText value="Director :" />  
        <h:outputText value="#{projet.currentDomaines.nomDirecteur}" />  
    </h:panelGrid>  
</h:form>
Run Code Online (Sandbox Code Playgroud)

似乎一切都是正确的但我必须遗漏一些东西......所以我通过改变当前的Domaines(对象类型Domaines)来测试文本(String)并且它工作了,这里是代码:

<h:form id="mainfrm">   
    <h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">  
        <h:outputText value="Basic Usage: " />  
        <p:selectOneMenu id="domaine" value="#{projet.text}">  
            <f:selectItem …
Run Code Online (Sandbox Code Playgroud)

jsf selectonemenu primefaces

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

Android:点击5次或更多次后启动活动

我有一个onClick使用intent启动活动的监听器,但是只有当用户单击五次或更多次时,如何使监听器触发Activity意图?

public boolean onClick(View v) {

    Intent myIntent = new Intent(activity, loginActivity.class);
    activity.startActivity(myIntent);

    return false;   
}
Run Code Online (Sandbox Code Playgroud)

在这里,我要登录Activity.登录成功后如何返回上一个活动?

public void onClick(View v) {

    String username = Username.getText().toString();
    String password = Password.getText().toString();

    if(username.equals("guest") && password.equals("guest")) {
        lResult.setText("Login successful.");
    } else {
        lResult.setText("Login failed");
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-intent onclicklistener

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