小编ber*_*tie的帖子

JSF 2和Post/Redirect/Get?

如果我错了,请纠正我,但我想我的所有非AJAX提交应该使用Post/Redirect/Get(PRG)方式,因为GET应该用于刷新/查询数据,在我的情况下,我能想到的应用程序页面实际上只是更新数据然后刷新页面,所以我认为PRG适合这里.

我相信我可以使用faces-config.way来实现这一点<redirect/>,我可以使用它,或者我可以使用return "myview.xhtml?faces-redirect=true";

现在的问题是......

有没有什么方法可以全局配置,对于非AJAX调用/提交,自动使用faces-redirect = true,这样我的源码就像这样简单:

return "myview";
Run Code Online (Sandbox Code Playgroud)

jsf post-redirect-get jsf-2

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

mongorestore命令替换现有记录?

有没有办法让mongorestore替换数据库中存在的记录而不是跳过它,这是默认行为?

我目前正在使用mongodb的最新2.4.x版本.

mongodb

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

创建会话无状态使用

我希望create-session="stateless"在我的webapp中实现无状态弹簧安全性的最终目的是改变它,但事实并非如此.

随着这种变化,Spring安全性似乎无法正常工作,因为(我的假设)spring安全性不会在会话中存储任何内容,也无法对安全的Web请求进行身份验证.

我如何利用这种无状态功能?

我似乎还没有找到关于如何为无状态webapp实现无状态弹簧安全性的任何相关示例.

谢谢 !

spring spring-security

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

多个mongo更新运算符在一个语句中?

我可以在一个声明中结合使用$ pushAll和$ inc吗?

在结合之前,这很好用:

db.createCollection("test");
db.test.insert({"name" : "albert", "bugs" : []});

db.test.update({"name":"albert"}, 
    {"$pushAll" : {"bugs" : [{"name":"bug1", "count":1}]}});

db.test.update({"name":"albert"}, 
    {"$inc" : {"bugs.0.count" : 1}});

db.test.update({"name":"albert"}, 
    {"$pushAll" : {"bugs" : [{"name":"bug2", "count":1}]}});
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将它组合起来时:

db.createCollection("test");
db.test.insert({"name" : "albert", "bugs" : []});

db.test.update({"name":"albert"}, 
    {"$pushAll" : {"bugs" : [{"name":"bug1", "count":1}]}});

db.test.update({"name":"albert"}, 
    {
       "$pushAll" : {"bugs" : [{"name":"bug2", "count":1}]}, 
       "$inc" : {"bugs.0.count" : 1}
    }
);
Run Code Online (Sandbox Code Playgroud)

发生此错误:

have conflicting mods in update
Run Code Online (Sandbox Code Playgroud)

我想这有可能做到这一点,而且,我想象的不仅仅是pushAll和inc,但我不确定这是否得到支持?


2012年3月23日更新

我在一个数组的不同元素上尝试了多个$ inc,它有效(虽然不正确.引用下面的答案,以澄清为什么这个doensnt运行良好,有效的方法The correct way to increment both fields is as …

mongodb

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

JSF 2/primefaces:p:面板没有用ajax渲染?

我不确定这种行为是否正常.
我希望panel只有在点击触发ajax请求的按钮后才能呈现我.

不使用Ajax工作正常:

  1. p:panel id="myPanel" rendered="#{myBean.flag}"
  2. p:commandButton ajax="false" action="#{myBean.setFlagToTrue}"
  3. 在单击按钮之前,不会显示myPanel (flag = false)
  4. 单击该按钮,将标志设置为true,并使myPanel正常

使用ajax失败:

  1. p:panel id="myPanel" rendered="#{myBean.flag}"
  2. p:commandButton ajax="true" action="#{myBean.setFlagToTrue}" update="myPanel"
  3. 在单击按钮之前,不会显示myPanel (flag = false)
  4. 单击该按钮,将标志设置为true(由我的日志文件显示),并且不会呈现 myPanel

我已经尝试省略了渲染属性,实际上ajax工作得很好.
我可以通过查看面板内反映的变化来判断.

primefaces jsf-2

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

对EL中的字符串使用单引号或双引号

<ui:repeat value="#{coreGridBean.heroBeanList}" var="hero"
    offset="0" step="1" size="#{hero.size}" varStatus="status">
    <tr class="#{status.even ? 'evenColumn' : 'oddColumn'}">
        <td>#{status.index}</td>
        <td>#{hero.id}</td>
        <td>#{hero.race}</td>
        <td>#{hero.name}</td>
    </tr>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

我想知道使用class="#{status.even ? 'evenColumn' : 'oddColumn'}"是否正确.

我觉得使用单引号而不是双引号有点内疚.但在这种情况下,双引号失败,单引号获胜.

string quotes jsf el jsf-2

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

JBoss Weld + java.lang.OutOfMemoryError:PermGen空间

我刚刚切换到Weld来使用CDI JSF 2 Beans +会话范围.

这是我的maven依赖:

    <dependency>
        <groupId>org.jboss.weld.servlet</groupId>
        <artifactId>weld-servlet</artifactId>
        <version>1.0.1-Final</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

这是我的web.xml中的条目:

<listener>
  <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

我立即注意到的一件事是我只需要重新加载我的tomcat 7 2次,java.lang.OutOfMemoryError: PermGen space并将显示在catalina.out日志文件中.

在使用Weld之前,我可以在不使用java.lang.OutOfMemoryError的情况下安全地重新加载我的tomcat 7超过10次.我认为在catalina.sh中增加我的Xmx选项会有所帮助,但这并不符合我的经验.JAVA_OPTS=-Xmx1024m

这是正常的吗?

java jsf cdi jsf-2 jboss-weld

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

Eclipse快捷方式在构造函数中生成简单赋值?

反正是否从构造函数的参数生成简单赋值?

来自:

public class MyClass {

  public MyClass(String id, String name, String desc) {

  }

}
Run Code Online (Sandbox Code Playgroud)

并且通过一些神奇的捷径,它将成为:

public class MyClass {

  public MyClass(String id, String name, String desc) {
    this.id = id;
    this.name = name;
    this.desc = desc;
  }

}
Run Code Online (Sandbox Code Playgroud)

如果我们有快捷方式生成这个(以避免许多'ctrl + 1'来创建非现有字段),那就更好了:

public class MyClass {
  private String id;
  private String name;
  private String desc;

  public MyClass(String id, String name, String desc) {
    this.id = id;
    this.name = name;
    this.desc = desc;
  }

}
Run Code Online (Sandbox Code Playgroud)

更新

我找到了一种可以接受的方法来解决这个问题:

首先,我的典型用法:

带参数的构造函数通常是来自另一个类的ctrl + …

java eclipse

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

JSF 2 ViewScope问题

引用这篇好文章,

新的视图范围应该正好解决这些问题.只要您一次又一次地将表单提交到同一视图,@ ViewScoped bean就会存在.换句话说,只要action方法返回null或甚至void,bean就会在下一个请求中出现.导航到不同的视图后,bean将被删除.

我想到了这些问题:

  1. 如果我当前的视图是index.xhtml,如果我明确指定,return "index";或者<h:commandButton action="index.xhtml" ..>基本上返回到同一视图,bean将再次重新创建..为什么?
  2. 视图操作的bean可以在重定向中存活吗?
  3. 如果可以,我该如何指定呢?我不能想象做这样的事情return "?faces-redirect=true"或者<h:commandButton action="?faces-redirect=true" ..>,是的,我想跳过定义导航faces-config.xml使用<redirect/>.

jsf jsf-2

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

浏览器返回+ viewscope bean

问题是:点击浏览器后退按钮会发生什么 - >打开一个已经销毁了viewscoped-managedbean的页面 - >从该页面的commandButton提交一个带有网格记录选择的请求?

我的期望:重新创建关联的viewscope-managebean,接收网格记录选择,并处理它们,就像从不涉及浏览器后退按钮一样.

我的经验:相关的viewscope-managebean不会重新创建,也不会接收网格记录选择.必须重新输入URL,或者在点击浏览器后退按钮后重新输入F5才能再次正常工作.

所以这是成功的场景,所有的bean都是视图编组的bean:

  1. 在@PostConstruct中创建了page1.xhtml - > page1Bean,查询数据等
  2. 检查/选择数据表中的多条记录,单击"处理"按钮
  3. page1Bean的进程方法将选定的记录存储在flash对象中,并重定向到page2.xhtml
  4. page1Bean被破坏,page2Bean被创建,并且在preRenderView监听器方法中,从flash对象中获取所选记录,并处理它们
  5. 单击"转到主页面"commandButton重定向到page1.xhtml,并且page2Bean被销毁,page1Bean再次创建
  6. 从2号到5号的循环仍然可行

现在,这是涉及浏览器后退按钮的错误情况(从#6开始发生的不同事情):

  1. 在@PostConstruct中创建了page1.xhtml - > page1Bean,查询数据等
  2. 检查/选择数据表中的多条记录,单击"处理"按钮
  3. page1Bean的进程方法将选定的记录存储在flash对象中,并重定向到page2.xhtml
  4. page1Bean被破坏,page2Bean被创建,并且在preRenderView监听器方法中,从flash对象中获取所选记录,并处理它们
  5. 单击浏览器后退按钮page2Bean未销毁,未创建page1Bean
  6. 检查/选择数据表中的多条记录,单击"处理"按钮
  7. page1Bean方法执行(奇怪,因为page1Bean应该被销毁),但无法看到所做的记录选择,并重定向到page2.xhtml
  8. page1Bean没有被销毁(没有日志记录输出),没有创建page2Bean(因为它没有被销毁),像往常一样执行preRenderView监听器,但这一次,flash对象中没有选定的记录

是否可以使用带有浏览器后退按钮的viewscope-beans获得正常体验(就像没有浏览器后退按钮一样)?

这是我的依赖:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.faces</artifactId>
    <version>2.1.3</version>
    <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

请分享您的想法!

back-button jsf-2

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