小编Sco*_*ott的帖子

重新申请参数

在查看Selenium源代码时,我在PageFactory中注意到以下内容:

public static <T> T initElements(WebDriver driver, Class<T> pageClassToProxy) {
  T page = instantiatePage(driver, pageClassToProxy);
  initElements(driver, page);
  return page;
}

public static void initElements(WebDriver driver, Object page) {
  final WebDriver driverRef = driver;
  initElements(new DefaultElementLocatorFactory(driverRef), page);
}
Run Code Online (Sandbox Code Playgroud)

拥有以下产品线有什么好处?

final WebDriver driverRef = driver;
Run Code Online (Sandbox Code Playgroud)

将参数设置为final,然后将其传递给下一个方法而不声明新引用是不是有意义?

java parameters static pass-by-reference pass-by-value

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

速度动态属性访问

是否可以使用#evaluate动态访问属性?我提前为这个长度道歉,但大部分只是示例代码,以充分说明我的问题.

我有一个首选项类,如下所示:

public class DefaultUserPreferences implements Preferences {
    //Getters and setters left off for "brevity…"
    private Panel defaultPanel;
    private OrderByColumn mostActiveSortOrder;
    private OrderByColumn recentlyModifiedAccountsSortColumn;
}
Run Code Online (Sandbox Code Playgroud)

这些类型中的每一种都只是一个自定义枚举.

public enum OrderByColumn {
    NAME,
    LAST_ACTIVITY,
    GROUP
}

public enum Panel {
    MOST_ACTIVE,
    RECENTLY_MODIFIED;

    public String getCamelCase() {
        String[] words = StringUtils.split(this.name(), "_");
        String rval = StringUtils.EMPTY;
        if (words != null && words.length >= 1) {
            rval = StringUtils.lowerCase(words[0]);
            for(int i = 1; I < words.length; i++) {
               rval += StringUtils.capitalize(words[i].toLowerCase());
            }
        }
        return …
Run Code Online (Sandbox Code Playgroud)

java velocity

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

Spring + Hibernate延迟加载错误

我有一个奇怪的情况,我在我的一个控制器上遇到了延迟加载问题. 注意:我正在使用OpenSessionInViewInterceptor,并将我的"服务"层注释为Transactional.

我有几种不同的加载Person对象的方法,一种是通过它的键,另一种是通过它的SSN.在我的person对象上,我有一组角色,我懒得加载.当我按Key加载时,我能够按预期访问列表.当我通过SSN加载时,我无法访问该列表.

在我的服务层配置文件中,我添加了:

<tx:annotation-driven />
Run Code Online (Sandbox Code Playgroud)

这是我的服务层片段,它通过Key&SSN加载人员(我知道这需要在DAO /重组中 - 这是继承的代码) - 注意SSN片段中的版本都不允许加载 - 两者都在同一课程:

@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public Person loadPersonByKey(final Person.Key personKey) {
    Assert.notNull(personKey);
    return (Person) getHibernateTemplate().get(Person.class, personKey);
} 

@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public Person findPersonBySsn(final SocialSecurityNumber ssn) {

    @SuppressWarnings("unchecked")
    //List<Person> results = getHibernateTemplate().findByNamedParam("from core.model.entities.Person as person where ssn = :ssn", "ssn", ssn);

    Criteria crit = getSession().createCriteria(Person.class);
    crit.add(Restrictions.eq("ssn", ssn));
    List<Person> results = crit.list();

    int size = results.size();

    Person returnPerson = ((size != 0) ? (Person) …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate spring-mvc

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

PDF生成不在IE中显示

我在让IE正常显示时遇到问题.下面是我可以创建的最小的测试用例,它显示了问题.我正在使用Spring 3.0.5和PdfBox 1.6.

这是一个展示问题的简化控制器:

@RequestMapping(method = RequestMethod.GET, value = "generatePdf.pdf")
public ResponseEntity<byte []> generatePdf() throws IOException {
  PDDocument document = null;
  try {
    document = new PDDocument();

    PDPage page = new PDPage();
    document.addPage(page);
    PDFont font = PDType1Font.HELVETICA_BOLD;
    PDPageContentStream contentStream = new PDPageContentStream(document, page);
    contentStream.beginText(); 
    contentStream.setFont(font, 12);
    contentStream.moveTextPositionByAmount(100, 500);
    contentStream.drawString("Hello World");
    contentStream.endText();
    contentStream.close();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    document.save(baos);
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(new MediaType("application", "pdf"));
    headers.setContentLength(baos.toByteArray().length);
    return new ResponseEntity<byte[]>(baos.toByteArray(), headers, HttpStatus.CREATED);
  } catch (Exception e) {
    HttpHeaders headers = …
Run Code Online (Sandbox Code Playgroud)

java pdf spring spring-mvc

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

Selenium WebDriver和InternetExplorer

我最近更新到Selenium 2.24.1以使Firefox 13正常工作.通过此更新,您现在可以运行类似于chromedriver.exe的可执行文件,以便将事件分派给IE.但是,我没有运气测试与IE运行.为了使用chrome运行,我显然必须设置webdriver.chrome.driver位,但是它和Firefox的代码相同.

这是我的源代码:

public class GoogleTest {

@Test
public void test() throws Exception {
  System.setProperty("webdriver.ie.driver", "IEDriverServer.exe");
  final WebDriver driver = new InternetExplorerDriver();
  driver.get("http://www.google.com");
  driver.findElement(By.name("q")).sendKeys("test");
  driver.findElement(By.name("q")).submit();
  driver.quit();
}
Run Code Online (Sandbox Code Playgroud)

}

但是,在执行此测试时,我会遇到此堆栈跟踪

org.openqa.selenium.NoSuchElementException: Unable to find element with name == q (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 395 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.24.1', revision: '17205', time: '2012-06-19 15:28:49'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', …
Run Code Online (Sandbox Code Playgroud)

java selenium internet-explorer selenium-webdriver

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

Geb + Spock +常规设置

所以我一直试图让这些工具一起运行,但我似乎无法正确设置.每次出现以下错误时:

The project was not built since its build path is incomplete. Cannot find the class file for org.spockframework.mock.MockController. Fix the build path then try building this project.
Run Code Online (Sandbox Code Playgroud)

我已经创造了这个要点.当我运行gradle chrome测试时,我得到以下输出:

 gradle chrome test
 :compileJava UP-TO-DATE
 :compileGroovy UP-TO-DATE
 :processResources UP-TO-DATE
 :classes UP-TO-DATE
 :compileTestJava UP-TO-DATE
 :compileTestGroovy FAILED

 FAILURE: Build failed with an exception.
 * What went wrong:
 Execution failed for task ':compileTestGroovy'.
 > org/spockframework/mock/MockController

 * Try:
 Run with --stacktrace option to get the stack trace. Run with --info or --debug …
Run Code Online (Sandbox Code Playgroud)

groovy gradle spock geb

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

Java Date奇怪

出于好奇,为什么我收到IllegalArgumentExceptionMONTH在下面的测试案例?

public class Testing {
    public static void main(String args[]) {

      Calendar c = Calendar.getInstance(Locale.getDefault());
      c.setLenient(false);
      Date d = new Date();

      c.set(Calendar.MONTH, Calendar.FEBRUARY);
      c.set(Calendar.DAY_OF_MONTH, 30);
      c.set(Calendar.YEAR, 2010);

      d = c.getTime();  //Exception is not thrown until this line

      System.out.println(d.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

我查看了GregorianCalendar,它是我系统的默认值,并且意识到该MONTH字段实际上是第一个在2月30日与3月2日相比有所不同的字段,但这不IllegalArgumentException应该是导致溢出的原因,还是仅仅被认为难以"发现"?

java datetime

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

Java对象创建与字符串解析

我正在努力将一个以JSP为中心的项目迁移到使用Velocity.在许多地方,JSP页面只是解析字符串以显示各种内容.这使得JSP非常难看并且难以维护.

我修改了这个类的Controller来为我做这项工作(即创建一个POJO列表),然后使用velocity迭代各个部分.我觉得它会带来很大的阻力.

我意识到创建Object会带来开销,但它使我们的页面更​​容易调试,编写和使用.除了它将UI与背景中发生的核心逻辑分开的事实.更不用说我们的appservers是BORED.数据库在痛苦中畏缩.我们将看到用户增加了十倍(这可能就是为什么最初开发它来解析JSP中的字符串并跳过对象创建) - 这让我觉得过早优化.

有什么进一步的论据支持我的说法,即我们应该吃掉与对象创建相关的成本?

java migration jsp

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

原语上的Java反射和isInstance

我必须在这里遗漏一些东西,但我似乎在做一些基本的反思时遇到了麻烦.我认为,由于像拳击这样的东西,我会收到以下两个印刷品中的每一个.这是简单的Main类:

package com.reflection;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestingReflection {

    public static void main(String[] args) throws SecurityException,
                                                  NoSuchMethodException,
                                                  IllegalArgumentException, 
                                                  IllegalAccessException,
                                                  InvocationTargetException 
    {
        final Class c = Reflection.class;
        Reflection p = new Reflection();
        p.setIntObj(new Integer(1));
        p.setIntPrim(1);
        for (Field field : c.getDeclaredFields()) {
            char first = Character.toUpperCase(field.getName().charAt(0));
            String capitalized = first + field.getName().substring(1);
            Method getField = 
                  c.getDeclaredMethod("get" + capitalized, new Class [] {});
            Class fieldClass = getField.getReturnType();
            Method setField = 
                  c.getDeclaredMethod("set" + capitalized,
                                      new Class [] { fieldClass }); …
Run Code Online (Sandbox Code Playgroud)

java reflection primitive-types

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

合并后Hibernate延迟加载错误

我正在使用带有自定义FlashScope实现的vanilla Spring MVC.我们基本上使用它来遵循Post-Redirect-Get模式.

我遇到了一个奇怪的情况.在我的帖子中,我做了一些搜索用户输入的参数,并将这些实例设置到FlashScope上.我看到那些碎片工作正常.

在我放到FlashScope上的对象中,我有一个延迟加载的集合,但是当我尝试访问集合时,如下所示:

entity.getLazyLoadedCollection();
Run Code Online (Sandbox Code Playgroud)

我收到以下stacktrace:

ERROR org.hibernate.LazyInitializationException IP127.0.0.1 CV#4c44559c-c576-4732 P#75004 - could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at core.model.entities.WorkflowState_$$_javassist_36.getFunctions(WorkflowState_$$_javassist_36.java)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,就在上面的调用之前,我将它合并到我的服务层的会话中:

getSession().merge(entity);
Run Code Online (Sandbox Code Playgroud)

Hibernate Documentation声明如果我知道我正在使用新会话,我应该调用update,但是JavaDocs看起来我应该调用merge ...

作为一种解决方法,我已经完成了以下工作:

if (getSession().contains(entity)) {
    getHibernateTemplate().merge(person);
} else {
    getSession.update(entity);
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

java hibernate spring-mvc

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

Java Spring ApplicationContext配置

我正在将所有Spring配置移动到Java代码.我遇到了一个问题,我现在想要根据命令行开关或maven配置文件等设置我正在使用的配置文件......我还想避免在我的每个测试中放置所有相同的注释类.这不是一个Web应用程序,而是一个功能测试套件.

这是我的尝试:

public class CompanyApplicationContextInitializer 
  implements ApplicationContextInitializer<ConfigurableApplicationContext> {

  @Override
  public void initialize(final ConfigurableApplicationContext applicationContext) {
    final AnnotationConfigApplicationContext rootContext = new AnnotationConfigApplicationContext();
    rootContext.getEnvironment().setActiveProfiles(System.getProperty("spring.profile.active", "local"));
    rootContext.register(LocalConfiguration.class, SauceLabsConfiguration.class);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我用以下内容注释我的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CompanyApplicationContextInitializer.class)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行我的测试时,我的自动装配件未找到.我在正确的轨道上吗?如何在此类中连接以编程方式设置我的ApplicationContext?

java spring unit-testing

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

用于FTP操作的标准Java类

我可以使用标准Java类进行FTP操作(上传,下载,删除,列表......)吗?因为,我找到了一个很好的FTP客户端librabry Apache Commons Net,但我的经理想根据标准类编写自己的.

如何让我的经理允许我们使用上面的包,如果她不购买这个库的使用,我们可能会遇到什么陷阱?

java ftp

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