我的电脑运行Windows 10,我使用Java和Eclipse.最近,Windows警告我,我正在遇到短磁盘空间,经过一些研究后,我注意到.m2我的用户文件夹(C:\Users\MySelf)下面有一个名为202Gb 的文件夹.
我知道这个文件夹属于Maven.由于这个文件夹比我的所有项目及其依赖项都大,所以在我看来,Maven保留了不必要的文件,所以我想摆脱它们.
是安全的只是删除文件夹内容或我应该运行一些特定的过程,以节省空间并保持Maven运行良好?
我的应用程序(JSF 2,Java 6,JBoss 7.1)必须提供两种操作模式:可访问性模式和非可访问性模式.
在可访问性模式中,一些(并非所有)页面具有特定设计以便屏幕阅读器更好地读取.两种模式之间的区别纯粹是视觉上的,托管bean完全相同.理想情况下,不需要更改Java代码.
大部分工作已完成:
尽管如此,它几乎完美地工作,但似乎有某种视图缓存会破坏我的解决方案.考虑以下场景:
在最后一步中,我们可以理解,即使在可访问性模式中并且发生资源路径转换(我有记录到证明),页面也会以默认的非可访问性模式生成.
那么,JSF中真的有页面缓存吗?我怎样才能清除它,所以页面确实会再次渲染?
网络监控向我显示该请求确实已发布到应用程序,因此此处没有浏览器缓存.
我有一个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()(此方法加载以bean与Student传递的id对应的实例命名的属性),但它永远不会被命中.
经过一段时间的思考,我才明白为什么它不起作用.传递给详细信息页面的参数是student.id,但是在显示所有学生时student使用的名称,因此无效在其中.var<p:datatable/>student<p:dialog/><p:datatable/>
所以,我需要的是一种使用给定行中相应学生的id来显示对话框的方法.理想情况下,我想在这里进行ajax调用,因此细节只有在被绑定时才会加载.
有任何想法吗?
此时我有一个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)
我错过了什么?
我有一个 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)
作为附加信息,此类方法内部的断点永远不会被命中。
发生了什么以及如何解决?
我必须在我的项目中使用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!
我目前的环境是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()从不调用该方法,所以 …
鉴于代码:
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 ×3
jsf ×3
jsf-2 ×3
primefaces ×2
asynchronous ×1
cdi ×1
datatable ×1
dialog ×1
eclipse ×1
ejb ×1
gradle ×1
hibernate ×1
java-8 ×1
java-stream ×1
jboss ×1
maven ×1
navigation ×1
viewparams ×1