小编Ale*_*xSC的帖子

如何清除.m2 Maven文件夹?

我的电脑运行Windows 10,我使用Java和Eclipse.最近,Windows警告我,我正在遇到短磁盘空间,经过一些研究后,我注意到.m2我的用户文件夹(C:\Users\MySelf)下面有一个名为202Gb 的文件夹.

我知道这个文件夹属于Maven.由于这个文件夹比我的所有项目及其依赖项都大,所以在我看来,Maven保留了不必要的文件,所以我想摆脱它们.

是安全的只是删除文件夹内容或我应该运行一些特定的过程,以节省空间并保持Maven运行良好?

eclipse maven

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

如何在JSF中使用应用程序模式

我的应用程序(JSF 2,Java 6,JBoss 7.1)必须提供两种操作模式:可访问性模式和非可访问性模式.

在可访问性模式中,一些(并非所有)页面具有特定设计以便屏幕阅读器更好地读取.两种模式之间的区别纯粹是视觉上的,托管bean完全相同.理想情况下,不需要更改Java代码.

大部分工作已完成:

  1. 添加了页面顶部的链接以在模式之间切换
  2. 添加了一个支持bean来处理链接上的点击
  3. 启用辅助功能后,会将属性添加到会话cookie,以便将其标记为可访问
  4. 添加了ResourceResolver,当某个用户发出特定请求的可访问性时,重写可访问版本的页面路径

尽管如此,它几乎完美地工作,但似乎有某种视图缓存会破坏我的解决方案.考虑以下场景:

  1. 应用程序以非可访问性模式启动
  2. 我浏览了一些页面
  3. 我通过单击相应的链接打开辅助功能模式
  4. 我收到一个页面,告诉我我现在处于辅助功能模式,我注意到菜单已更改为其辅助功能版本(不同页面模板中存在的其他组件)
  5. 我导航到非访问页面,它们都处于辅助功能模式
  6. 在导入可访问性之前,我导航到访问过的页面,我在非可访问性版本中看到它们

在最后一步中,我们可以理解,即使在可访问性模式中并且发生资源路径转换(我有记录到证明),页面也会以默认的非可访问性模式生成.

那么,JSF中真的有页面缓存吗?我怎样才能清除它,所以页面确实会再次渲染?

更新1

网络监控向我显示该请求确实已发布到应用程序,因此此处没有浏览器缓存.

java jsf jsf-2

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

如何在ap:对话框中显示p:dataTable中当前行的详细信息,并在保存后更新

我有一个JSF 2应用程序,它有两个页面,一个用于列出学生,另一个用于显示给定学生的详细信息.列表页面包含指向学生表每行中详细信息页面的链接,该页面在浏览器中打开一个新选项卡,以便在单击时显示这些详细信息.

现在,需求已更改为在新选项卡中显示详细信息,但在列表页面中的模式对话框中.

我的想法是简单地将详细信息页面内容嵌入到模态对话框中,这样列表页面就不会太大而且难以维护.在这里开始我的怀疑.经过一番研究后,我将列表每行中的链接更改为以下按钮:

<p:commandButton value="Details" type="button"
                 onclick="PF('dialog-details').show()">
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)

该对话框声明如下:

<p:dialog widgetVar="dialog-details" header="Details" modal="true" width="95%">
    <ui:include src="student_details.xhtml">
        <ui:param name="id" value="#{student.id}"/>
    </ui:include>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

最后,详细信息页面更改为如下所示:

<ui:composition
    xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">

    <f:metadata>
        <f:viewParam name="id" value="#{studentBean.id}" />
    </f:metadata>

    <h1 class="title ui-widget-header ui-corner-all">Details of #{studentBean.bean.name} / #{studentBean.bean.number}</h1>
</ui:composition>                       
Run Code Online (Sandbox Code Playgroud)

当我单击按钮时,对话框确实显示,内容是详细信息页面.我在对话框中看到以下内容:

Details of  / 
Run Code Online (Sandbox Code Playgroud)

根本没有错误,但应该显示的数据不是.设置了断点StudentBean.setId()(此方法加载以beanStudent传递的id对应的实例命名的属性),但它永远不会被命中.

经过一段时间的思考,我才明白为什么它不起作用.传递给详细信息页面的参数是student.id,但是在显示所有学生时student使用的名称,因此无效在其中.var<p:datatable/>student<p:dialog/><p:datatable/>

所以,我需要的是一种使用给定行中相应学生的id来显示对话框的方法.理想情况下,我想在这里进行ajax调用,因此细节只有在被绑定时才会加载.

有任何想法吗?

datatable jsf dialog master-detail primefaces

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

如何为JBoss AS 7.1托管的JSF2应用程序设置Gradle构建?

此时我有一个build.gradle文件成功编译并测试(使用JUnit4)一个非常简单的java项目.

我的下一步是向此构建添加JSF2支持(为了拥有Web JSF2应用程序).我的想法是在我的本地JBoss 7.1容器中托管应用程序.现在事情变得有点模糊了.

我所做的是通过添加一些依赖项来为我的buid添加JSF2支持,所以dependencies块现在是这样的:

dependencies {
    compile 'org.jboss.weld.se:weld-se-core:'+weldVersion
    compile 'br.gov.frameworkdemoiselle:demoiselle-core:'+demoiselleVersion
    compile 'br.gov.frameworkdemoiselle:demoiselle-jsf:'+demoiselleVersion

    runtime 'javax.servlet:javax.servlet-api:3.1.0'
    runtime 'javax.enterprise:cdi-api:1.0-SP1'
    runtime 'org.jboss.weld.servlet:weld-servlet:'+weldVersion
    runtime 'com.sun.faces:jsf-api:2.2.8-02'
    runtime 'org.slf4j:slf4j-log4j12:1.7.7'

    testCompile 'junit:junit:4.11'
    testCompile 'org.jboss.arquillian.junit:arquillian-junit-container:'+arquillianVersion    
    testCompile 'br.gov.frameworkdemoiselle.component:demoiselle-junit:2.3.1'
}
Run Code Online (Sandbox Code Playgroud)

我注意到的第一个奇怪的事情是,在用Gradle刷新项目后(通过使用Gradle > Refresh All菜单),JBoss无法看到它.我注意到(似乎)Gradle禁用了项目中facet的使用.如果我手动激活facets并将运行时设置为JBoss 7.1,那么我将能够将它添加到JBoss(但我不想再手动操作).

将它添加到JBoss后我可以运行服务器,日志说JBoss正确加载了与我的Web应用程序对应的模块,但是当我在浏览器中输入它的url时,服务器以HTTP状态404响应.

src/main/webapp我有简单的index.html文件(如下所示),所以我期望只是在浏览器中看到它的内容,但这不会发生.

<html>
<body>
<h1>Hello world!</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

java jboss gradle jsf-2 gradle-eclipse

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

如何在@Asynchronous方法中正确使用CDI?

我有一个 JSF 2 应用程序(在 JBoss AS 7.1 之上运行),当用户单击页面中的按钮时,该应用程序必须启动一个很长的进程。其想法是进行非阻塞交互,因此用户可以等待并查看结果,或者简单地关闭页面并稍后返回以查看进展情况或结果(如果该过程已经结束)。

该过程本身在以下(简化的)类中进行编码:

@Stateless
@LocalBean
@ApplicationScoped
public class MyProcessManager {
    @Inject
    private ProcessHelper processHelper;

    @Asynchronous
    public void start(final ProcessParameters parameters) {
        // the process...
    }
}
Run Code Online (Sandbox Code Playgroud)

这样的类被标记为 ,@ApplicationScoped因为所有正在运行的进程(对于所有用户)都由它保存。因此,当单击按钮时,支持 bean 会设置一些参数并调用异步方法start()

一切都很顺利,直到进程尝试使用 时processHelper,它会运行许多 Hibernate 查询以继续进程的持久性部分。processHelper当调用第一个方法时,我得到以下异常:

WELD-001303: No active contexts for scope type javax.enterprise.context.RequestScoped
Run Code Online (Sandbox Code Playgroud)

作为附加信息,此类方法内部的断点永远不会被命中。

发生了什么以及如何解决?

jsf asynchronous ejb cdi

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

如何使Hibernate 4停止抛出"删除分离的实例"?

我必须在我的项目中使用Hibernate 4.1.7.不幸的是,我不能转向更新的版本.

在我的背景下,我有一个主要的细节情况.因此,我加载主对象并在网页上显示它的所有细节.我可以按照自己喜欢的方式更改主人和详细信息,甚至包括新的细节.我的保存代码如下:

@Override
@Transactional
public void save(Entity entity) {
    Session session = entityManager.unwrap(Session.class);
    session.saveOrUpdate(entity);
    session.flush();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试删除细节时出现问题.下面的代码显示了它是如何完成的:

myMaster.getDetails().remove(myDetail);
Run Code Online (Sandbox Code Playgroud)

我希望Hibernate将跟踪主对象的更改(它从列表成员中丢失了一个详细实例),但是当我调用save()它抛出的方法时java.lang.IllegalArgumentException: Removing a detached instance xxxx#yyyy.

我理解这个概念,如果试图删除一个分离的实例,但我不明白为什么刚刚删除的实例被Hibernate认为是分离的.

有任何想法吗?

TIA!

java hibernate

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

导航到传递参数的其他视图

我目前的环境是JRE 1.7,JSF 2.2,Eclipse Luna.在entity_index.xhtml我的应用程序的某个页面()中,我有以下(PrimeFaces)按钮:

<p:commandButton value="Details" action="entity_details"
                 ajax="false" onclick="this.form.target='_blank'">
    <f:param name="id" value="#{entity.id}" />
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)

我们的想法是提供一个按钮,以便用户可以单击它,当前实体的一些细节将显示在另一个浏览器选项卡(页面entity_details.xhtml)中.这是许多的一个按钮,因此entity_index.xhtml页面显示实体的许多实例,每个实例都有一个详细信息按钮.

按钮的工作方式是新选项卡打开并显示正确的页面(entity_details.xhtml),但实体ID永远不会到达处理详细信息页面的bean(EntityDetailsMB).详情页面如下:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:dsi="http://www.cce.ufpr.br"
    template="/private/template/sbadmin.xhtml">
<f:metadata>
    <f:viewParam name="id" value="#{entityDetailsMB.id}"/>
</f:metadata>

<ui:define name="content">
<h2 class="page-header">#{entityDetailsMB.entity.name}</h2>
<h:form id="form">
...
</ui:composition>
Run Code Online (Sandbox Code Playgroud)

请注意,有一个<f:metadata/>元素专门用于捕获从索引页面发送的参数并将其转发到id属性中EntityDetailsMB,其中包含以下内容:

public Entity getEntity() {
    return entityById(id);
}

public Long getId() {
    return id;
}

public void setId(Long value) {
    id = value;
}
Run Code Online (Sandbox Code Playgroud)

因为setId()从不调用该方法,所以 …

navigation primefaces jsf-2 viewparams

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

如何使用Java 8中的流在List实例中转换元素?

鉴于代码:

public Statement methodCallByName(MethodDeclaration method, String string) {
    List<ExpressionStatement> expressions = method.getBody().statements().stream()
                                                .filter(s -> s instanceof ExpressionStatement)
                                                .map(ExpressionStatement.class::cast)
                                                .collect(Collectors.toList());
    return null;
}
Run Code Online (Sandbox Code Playgroud)

我在Eclipse Oxygen中有以下错误:

在此输入图像描述

请注意,根据JDT文档statements()返回a .List

怎么了?

java-8 java-stream

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