我有一个使用JDBC(通过JPA)的Java应用程序,它使用主机名,端口和Oracle SID连接到开发数据库,如下所示:
JDBC:神谕:薄:@ oracle.hostserver1.mydomain.ca:1521:XYZ
XYZ是Oracle SID.现在我需要连接到不使用SID的不同Oracle数据库,而是使用Oracle"服务名称".
我试过这个,但它不起作用:
JDBC:神谕:薄:@ oracle.hostserver2.mydomain.ca:1522:ABCD
ABCD是另一个数据库的服务名称.
我究竟做错了什么?
我正在寻找一种在两个方向上在java.util.Date和javax.xml.datatype.XMLGregorianCalendar之间进行转换的简单方法.
这是我现在使用的代码:
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
/**
* Utility class for converting between XMLGregorianCalendar and java.util.Date
*/
public class XMLGregorianCalendarConverter {
/**
* Needed to create XMLGregorianCalendar instances
*/
private static DatatypeFactory df = null;
static {
try {
df = DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException dce) {
throw new IllegalStateException(
"Exception while obtaining DatatypeFactory instance", dce);
}
}
/**
* Converts a java.util.Date into an instance of XMLGregorianCalendar
*
* @param date Instance of java.util.Date …Run Code Online (Sandbox Code Playgroud) 我已经使用Apache POI一段时间以编程方式读取现有的Excel 2003文件.现在我有了一个新的要求,即在内存中创建整个.xls文件(仍使用Apache POI),然后将它们写入文件末尾.阻碍我的唯一问题是处理带日期的细胞.
请考虑以下代码:
Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);
Run Code Online (Sandbox Code Playgroud)
当我将包含此单元格的工作簿写入文件并使用Excel打开时,单元格显示为数字.是的,我确实认识到Excel将其"日期"存储为自1900年1月1日以来的天数,这就是单元格中的数字所代表的数字.
问题:我可以在POI中使用哪些API调用来告诉它我需要将默认日期格式应用于我的日期单元格?
理想情况下,如果用户在Excel中手动打开电子表格并键入Excel识别为日期的单元格值,我希望电子表格单元格显示的Excel默认日期格式与Excel分配的格式相同.
我有一个maven作为构建工具的应用程序.
我正在使用maven配置文件来设置不同配置文件的不同属性.
我想要做的是maven中的所有活动配置文件也将被移植到spring active配置文件中,所以我可以在bean signature(@profile)中引用它们.但我不知道该怎么做.
例如:考虑以下maven设置
<profiles>
<profile>
<id>profile1</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
</properties>
</profile>
<profile>
<id>profile2</id>
<properties>
</properties>
</profile>
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
</properties>
</profile>
<profile>
<id>production</id>
<properties>
</properties>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
假设我运行maven而没有指定我希望Spring拥有的任何其他配置文件profile1以及 development作为活动配置文件.
假设我有一个运行的基于Java的Web应用程序,其中包含0个或更多HttpSession与之关联的有效对象.我想要一种方法来访问当前的有效HttpSession对象列表.我在想我可以实现一个HttpSessionListener并使用它来追加存储在应用程序范围的属性中的会话ID值列表,但随后会因会话失效而更新列表并且谁知道是什么其他.
在我开始烘焙自己的解决方案之前,我想我应该问一个问题:
servlet API是否提供了一些访问完整的非失效会话对象列表的方法?
我使用Tomcat 6.x作为我的Web应用程序容器和MyFaces 1.2.x(JSF)库.
解决方案
我遵循类似于BalusC在这些现有问题中讨论的方法:
我按SessionData类修改了实现HttpSessionBindingListener.当绑定事件发生时,对象将从所有SessionData对象的集合中添加或删除自身.
@Override
public void valueBound(HttpSessionBindingEvent event) {
// Get my custom application-scoped attribute
ApplicationData applicationData = getApplicationData();
// Get the set of all SessionData objects and add myself to it
Set<SessionData> activeSessions = applicationData.getActiveSessions();
if (!activeSessions.contains(this)) {
activeSessions.add(this);
}
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
ApplicationData applicationData = getApplicationData();
Set<SessionData> activeSessions …Run Code Online (Sandbox Code Playgroud) 我似乎无法找到一种方法来强制在启动Web应用程序时实例化/初始化应用程序范围的托管bean.似乎应用程序范围的bean在第一次访问bean时会进行惰性实例化,而不是在启动Web应用程序时实例化.对于我的Web应用程序,当第一个用户第一次在Web应用程序中打开页面时,就会发生这种情况.
我想避免这种情况的原因是因为在我的应用程序范围的bean初始化期间发生了许多耗时的数据库操作.它必须从持久存储中检索一堆数据,然后以ListItem元素等形式缓存一些频繁显示给用户的数据.我不希望在第一个用户连接时发生这一切,因此导致长时间的延迟.
我的第一个想法是使用旧式ServletContextListener contextInitialized()方法,并从那里使用ELResolver手动请求我的托管bean的实例(从而强制初始化发生).不幸的是,我无法在此阶段使用ELResolver来触发初始化,因为ELResolver需要FacesContext并且FacesContext仅在请求的生命周期内存在.
有没有人知道另一种方法来实现这一目标?
我使用MyFaces 1.2作为JSF实现,目前无法升级到2.x.
我正在使用PrimeFaces 3.0-M3,我有<p:dataTable>两列.我希望第一列固定在20px的宽度.另一列可以使用留下的任何空间.
以下是我目前获得的截图:


第一个<p:column>似乎忽略了style应该限制宽度的设置.它的尺寸太大,不适合小的彩色方块,它是其中唯一的内容,然后另一列被推得太远.
这里有更多我的Facelet代码:
<p:dataTable
id="dataTableExpressions"
value="#{catconBean.userDefinedExpressionDataModel}"
var="currentRow"
emptyMessage="!! EMPTY TABLE MESSAGE !!"
selection="#{catconBean.userDefinedExpressionToEdit}"
selectionMode="single">
<p:ajax
event="rowSelect"
listener="#{catconBean.onUserDefinedExpressionRowSelect}"
update=":toolbarForm:catconToolbar" />
<p:ajax
event="rowUnselect"
listener="#{catconBean.onUserDefinedExpressionRowUnselect}"
update=":toolbarForm:catconToolbar" />
<p:column id="paletteColor" style="width:20px;">
<h:panelGroup
layout="block"
rendered="#{not empty currentRow.paletteColor}"
style="width:16px;height:16px;border:thin;border-style:solid;border-color:black;background-color:##{currentRow.paletteColor.RGB};" />
<h:panelGroup
layout="block"
rendered="#{empty currentRow.paletteColor}"
style="width:16px;height:16px;border:thin;border-style:dashed;border-color:red;background-color:white;text-align:center;">
<h:outputText value="?" style="color:red;font-weight:bold;" />
</h:panelGroup>
</p:column>
<p:column id="name">
<f:facet name="header">
<h:outputText value="#{bundle.catcon_label_CategoryName}" />
</f:facet>
<h:outputText
value="#{currentRow.name}"
style="#{not currentRow.definitionComplete ? 'color:red;' : ''}" />
</p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何修改我的Facelet代码,使第一列的固定宽度为20px?
我想在web.xml文件中声明我的JSF 2 webapp使用的一些常量值,如下所示:
<web-app>
<context-param>
<param-name>myconstantkey</param-name>
<param-value>some string value</param-value>
</context-param>
</web-app>
Run Code Online (Sandbox Code Playgroud)
从支持bean内部获取这些值非常简单:
FacesContext ctx = FacesContext.getCurrentInstance();
String myConstantValue =
ctx.getExternalContext().getInitParameter("myconstantkey");
Run Code Online (Sandbox Code Playgroud)
如何使用JSF EL从Facelets页面内部获得相同的东西来获取值?
我希望能够从JSF 2托管bean内部的消息包中检索字符串.这可以在将字符串用作FacesMessage抛出异常中的消息中的摘要或详细信息参数的情况下完成.
我想确保托管bean为用户的语言环境加载正确的消息包.我不清楚如何使用JSF API调用从托管bean执行此操作.
我的配置是:
注意:我确实看到了类似的问题,但这取决于我的配置中不可用的功能
编辑:我在原来的问题上犯了一个错误.我想要问的是"如何从托管bean中获取资源包字符串"?BalusC给了我正确的答案.我实际要问的解决方案非常相似:
public static String getResourceBundleString(
String resourceBundleName,
String resourceBundleKey)
throws MissingResourceException {
FacesContext facesContext = FacesContext.getCurrentInstance();
ResourceBundle bundle =
facesContext.getApplication().getResourceBundle(
facesContext, resourceBundleName);
return bundle.getString(resourceBundleKey);
}
Run Code Online (Sandbox Code Playgroud)
此外,这里还有一个链接到另一个问题,解释了"消息"包和"资源"包之间的区别.
我有一个JSF 2复合组件,它采用了一些Ajax行为.我想添加一个listener方法到<f:ajax>标签我复合组件内部,但listener方法应为提供<composite:attribute>的<composite:interface>.
<f:ajax>我的复合组件中的标签当前是硬编码到这样的监听器:
<f:ajax
event="valueChange"
execute="@this"
listener="#{controller.genericAjaxEventLogger}"
render="#{cc.attrs.ajaxRenderTargets}" />
Run Code Online (Sandbox Code Playgroud)
bean上的listener方法有这个签名:
public void genericAjaxEventLogger(AjaxBehaviorEvent event)
throws AbortProcessingException {
// implementation code...
}
Run Code Online (Sandbox Code Playgroud)
我希望复合组件是这样的,所以页面可以提供自己的事件方法,但我无法弄清楚接口的正确语法.
<f:ajax
event="valueChange"
execute="@this"
listener="#{cc.attrs.ajaxEventListener}"
render="#{cc.attrs.ajaxRenderTargets}" />
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
更新解决方案:
我采用了BalusC建议的方法,效果很好.相关的片段是:
复合组件中的接口声明
<composite:interface>
<composite:attribute
name="myattributeUpdatedEventListener"
method-signature="void listener()"
required="true" />
...
</composite:interface>
Run Code Online (Sandbox Code Playgroud)
我的复合组件中使用的Ajax标记
<f:ajax
event="valueChange"
execute="@this"
listener="#{cc.attrs.myattributeUpdatedEventListener}"
render="#{cc.attrs.ajaxRenderTargets}" />
Run Code Online (Sandbox Code Playgroud)
我在页面中使用复合组件的位置
<h:form>
<compcomp:myCompositeComponent
myattributeUpdatedEventListener="#{myBackingBean.updatedEventListenerXYZ}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
和我的支持bean上的方法
public void updatedEventListenerXYZ() {
// do something here...
}
Run Code Online (Sandbox Code Playgroud) java ×7
jsf-2 ×4
jsf ×3
managed-bean ×2
ajax ×1
apache-poi ×1
css ×1
datatable ×1
date ×1
datetime ×1
httpsession ×1
jaxb ×1
jdbc ×1
listener ×1
maven ×1
oracle ×1
primefaces ×1
service-name ×1
servlets ×1
spring ×1
startup ×1
xml ×1