我从事大规模,大批量,面向公众的Web应用程序.应用程序的成功运行对业务非常重要,因此有许多MI工具可以针对它运行.
其中一个MI工具实际上是查看每个页面请求发送到浏览器的html(我已经对它进行了很多简化,但是出于这个问题的目的,它是一个对html进行一些分析的工具)
对于这个MI工具来获取它需要的数据,我们将元数据放在head元素中.目前我们以html评论的方式做到:
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
<!-- details = 52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009] -->
<!-- policy id = 1234567890 -->
<!-- party id = 0987654321 -->
<!-- email address = user@email.com -->
<!-- error = 49 -->
<!-- subsessionid = bffd5bc0-a03e-42e5-a531-50529dae57e3-->
...
Run Code Online (Sandbox Code Playgroud)
该工具只需使用正则表达式查找给定的元数据注释
由于这些数据是元数据,我想将其更改为html元标记,因为它在语义上是正确的.像这样的东西:
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
<meta name="details" content="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" />
<meta name="policyId" content="1234567890" />
<meta name="partyId" content="0987654321" />
<meta name="emailAddress" content="user@email.com" />
<meta name="error" content="49" />
<meta name="subsessionid" content="bffd5bc0-a03e-42e5-a531-50529dae57e3" />
...
Run Code Online (Sandbox Code Playgroud)
这感觉更加语义,我可以让MI工具使用它没有问题 …
我有一个gradle构建脚本,我试图包含Eric Wendelin的css插件 - http://eriwen.github.io/gradle-css-plugin/
它很容易实现,因为我只想缩小(而不是组合和gzipping),我已经得到了构建脚本的相关部分,如下所示:
minifyCss {
source = "src/main/webapp/css/brandA/styles.css"
dest = "${buildDir}/brandA/styles.css"
yuicompressor {
lineBreakPos = -1
}
}
war {
baseName = 'ex-ren'
}
war.doFirst {
tasks.myTask.minifyCss.execute()
}
Run Code Online (Sandbox Code Playgroud)
这很完美 - 当我运行gradle war任务时,它调用minifyCss任务,获取源css文件,并在buildDir中创建一个缩小版本
但是,我有一些css文件需要缩小,但不能合并到一个文件中(因此我没有使用combineCss任务)
我希望能够做的是使用某种类型的minifyCss任务引用变量的源和目标属性(假设这是正确的术语吗?) - 传递给签名中的任务的变量,或全局变量,或者东西......
我觉得这样的东西(这不起作用):
minifyCss(sourceFile, destFile) {
source = sourceFile
dest = destFile
yuicompressor {
lineBreakPos = -1
}
}
war {
baseName = 'ex-ren'
}
war.doFirst {
tasks.myTask.minifyCss.execute("src/main/webapp/css/brandA/styles.css", "${buildDir}/brandA/styles.css")
tasks.myTask.minifyCss.execute("src/main/webapp/css/brandB/styles.css", "${buildDir}/brandB/styles.css")
tasks.myTask.minifyCss.execute("src/main/webapp/css/brandC/styles.css", "${buildDir}/brandC/styles.css")
}
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
def sourceFile = null
def destFile = null
minifyCss …Run Code Online (Sandbox Code Playgroud) 我正在使用html5/javascript getUserMedia api编写一个js应用程序,如果可用的话,它将使用设备的相机.我正在使用Modernizr来检测(浏览器的)功能,如下所示:
if (Modernizr.getusermedia) {
Run Code Online (Sandbox Code Playgroud)
并在真正的块内:
navigator.getUserMedia(
{ // we would like to use video but not audio
// This object is browser API specific! - some implementations require boolean properties, others require strings!
video: true,
audio: false
},
function(videoStream) {
// 'success' callback - user has given permission to use the camera
// my code to use the camera here ...
},
function() {
// 'no permission' call back
console.log("user did not give access to the camera");
} …Run Code Online (Sandbox Code Playgroud) 我们正在构建API并使用Spring RestControllers和Spring HATEOAS.
将war文件部署到容器并发出GET请求时http://localhost:8080/placesapi-packaged-war-1.0.0-SNAPSHOT/places,HATEOAS链接如下所示:
{
"links" : [ {
"rel" : "self",
"href" : "http://localhost:8080/placesapi-packaged-war-1.0.0-SNAPSHOT/places",
"lastModified" : "292269055-12-02T16:47:04Z"
} ]
}
Run Code Online (Sandbox Code Playgroud)
在网络方面是,部署的应用程序(如:placesapi-packaged-war-1.0.0-SNAPSHOT)
在真实的运行时环境(UAT及更高版本)中,容器可能位于http服务器后面,例如Apache虚拟主机或类似的Web应用程序.像这样的东西:
<VirtualHost Nathans-MacBook-Pro.local>
ServerName Nathans-MacBook-Pro.local
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
ProxyPass / ajp://localhost:8009/placesapi-packaged-war-1.0.0-SNAPSHOT/
ProxyPassReverse / ajp://localhost:8009/placesapi-packaged-war-1.0.0-SNAPSHOT/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
使用上面的内容,当我们发出GET请求时http://nathans-macbook-pro.local/places,结果响应如下所示:
{
"links": [ {
"rel": "self",
"href": "http://nathans-macbook-pro.local/placesapi-packaged-war-1.0.0-SNAPSHOT/places",
"lastModified": "292269055-12-02T16:47:04Z"
} ]
}
Run Code Online (Sandbox Code Playgroud)
这是错误的,因为响应中的链接包含Web应用程序上下文,如果客户端要关注该链接,他们将获得404
有谁知道如何控制Spring HATEOAS这方面的行为?基本上我需要能够控制它在链接中生成的Web上下文名称.
我做了一些调整,可以看到使用自定义标头,X-Forwarded-Host您可以控制主机和端口,但我看不到任何类似的能够控制上下文.
我们考虑的其他选项涉及将应用程序部署到ROOT上下文或固定的命名上下文,然后相应地设置我们的虚拟主机.然而,这些感觉就像妥协而不是解决方案,因为理想情况下我们希望在同一容器上托管应用程序的多个版本(例如:placesapi-packaged-war-1.0.0-RELEASE,placesapi-packaged-war-1.0.1- RELEASE,placesapi-packaged-war-2.0.0-RELEASE等)并根据http请求标头将虚拟主机转发到正确的应用程序. …
我有一个基于UINavigationController的应用程序.我可以在我的视图控制器的viewDidLoad方法中以编程方式设置UINavigationBar的标题:
self.navigationItem.title = m_name;
Run Code Online (Sandbox Code Playgroud)
我可以这样做,以便导航栏中的标题是可编辑的吗?IE浏览器.我希望用户能够点击导航栏中的标题,并能够编辑它.
这可能吗?如果有可能,它是否可能符合Apple的人机界面指南?(这篇文章暗示它会,但不会告诉我如何实现它 - 让UINavigationBar标题可编辑)
非常感谢
弥敦道
我正在开发一个使用slf4j api记录的应用程序:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
private static final Logger LOG = LoggerFactory.getLogger(FreemarkerEmailPreviewGenerator.class);
...
LOG.error("Error generating email preview", e);
Run Code Online (Sandbox Code Playgroud)
(上面的代码贴出来显示正在使用的类和包,但非常标准的东西.)
我们使用如下配置的logback:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{HH:mm:ss.SSS}] [%thread] [%-5level %logger{26} - %msg]%n
</pattern>
</encoder>
</appender>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我们的一些代码使用了使用java.util.logging记录的第三方库 - 特别是freemarker.从下面的控制台日志条目中可以看出,logback和jul都记录到控制台,但它们没有使用相同的配置(使用我们的模式的logback条目,jul不使用)
[12:24:38.842] [pool-2-thread-19] [INFO u.o.n.r.l.s.e.t.TemplateLoaderFromService - Finding template workflow/mail/templates/common/workflow-macros.ftl]
[12:24:38.859] [pool-2-thread-19] [INFO u.o.n.r.l.s.e.t.TemplateLoaderFromService - Loaded template workflow/mail/templates/common/workflow-macros.ftl as /workflow/mail/templates/common/workflow-macros.ftl from RegistryMailTemplateService.]
11-Jan-2017 12:24:38 freemarker.log.JDK14LoggerFactory$JDK14Logger error
SEVERE:
Expression domainContact is undefined …Run Code Online (Sandbox Code Playgroud) 我希望有人可以帮助解决这个问题。我正在尝试配置mvn release插件,pom.xml以便将更新的 pom 版本和标签作为release:prepare. 至关重要的是,它需要使用特定用户的 ssh 私钥,因为最终这将成为我们 CI 堆栈的一部分。
在pom.xml我目前有一个非常简单的发布插件配置:
<build>
<plugins>
<!-- release plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
scmpom 中的设置如下所示:
<scm>
<connection>scm:git:git://ssh@bitbucket.org/**account**/**project**.git</connection>
<developerConnection>scm:git:ssh://git@bitbucket.org/**account**/**project**.git</developerConnection>
<url>https://bitbucket.org/**account**/**project**</url>
</scm>
Run Code Online (Sandbox Code Playgroud)
我在 pom 中有以下属性(虽然不确定是否使用了它 - 我在一个松散相关的问题上找到了它的参考):
<properties>
<project.scm.id>bitbucket.org</project.scm.id>
Run Code Online (Sandbox Code Playgroud)
最后,我在 mvn 中有以下内容settings.xml:
<servers>
<server>
<id>bitbucket.org</id>
<privateKey>~/.ssh/bitbucket-read-write-access</privateKey>
<passphrase></passphrase>
</server>
Run Code Online (Sandbox Code Playgroud)
私钥文件~/.ssh/bitbucket-read-write-access存在,该文件夹中没有其他密钥(我特意去掉了默认的id_rsa)
当我运行时mvn release:perform,它在尝试推送到存储库时失败:
[INFO] Executing: /bin/sh -c cd /home/nathanrussell/projects/**project** && git push ssh:********@bitbucket.org/**account**/**project**.git refs/heads/master:refs/heads/master
[INFO] Working directory: …Run Code Online (Sandbox Code Playgroud) 从表面上看,有点奇怪的问题!但我正在创建一个使用webflow和传统Spring MVC控制器的Web应用程序.
从其中一个Webflow视图中,http请求(ajax)从客户端发送到spring控制器.当它最初被编码时,它与webflow没有很多逻辑连接,但现在事情已经开始,控制器可以真正知道请求来自哪个屏幕(视图状态).
我的控制器方法签名如下所示:
@RequestMapping(value="/AjaxStuff", method=RequestMethod.POST)
public String ajaxStuff(@ModelAttribute("quote") QB2MotorQuote p_quote, BindingResult p_bindingResult,
HttpServletRequest p_req, Model p_model, DefaultMessageContext p_messages) {
Run Code Online (Sandbox Code Playgroud)
我从一些webflow动作类中了解到,我可以从RequestContext对象获取当前状态:
public Event checkDeclines(RequestContext p_ctx) throws Exception {
// get the current state
StateDefinition state = p_ctx.getCurrentState();
Run Code Online (Sandbox Code Playgroud)
我从来没有真正理解Spring所做的'voodoo':)只需在方法签名上指定它们就可以自动注入参数(当然它只能注入它知道的东西??).我试过简单地改变我的控制器方法的方法签名来注入RequestContext(徒劳地希望它会被注入),但事实并非如此.它抱怨RequestContext是一个接口.
所以,有没有人知道如何让我的控制器知道当前的webflow状态 - 通过注入控制器方法签名中的东西,或者我可以从某种方式从http请求中获取它(或者我可以从请求获得的会话) ).
任何帮助都非常感谢.
我想知道是否有人可以帮忙。我们正在将 Spring Webflow 2 应用程序从使用基于 jsp 的视图层转换为基于 Thymeleaf 的视图。
对于这大部分来说,这是可以的,但现在我正在努力让 Thymeleaf 访问我们放入servletContext.
因此,我们有一个对象被放入servletContextbean 的一部分(实现ServletContextAware和InitializingBean)
为了简单起见,我们假设它是一个字符串:
public class ReferenceDataBuilder implements ServletContextAware, InitializingBean {
public void setServletContext(ServletContext p_context) {
p_context.setAttribute("referenceData", "test text" );
}
Run Code Online (Sandbox Code Playgroud)
在基于 jsp 的视图中,我们可以referenceData像这样访问对象:
<p><c:out value="${referenceData}"/></p>
Run Code Online (Sandbox Code Playgroud)
借助 Spring EL 的魔力,它知道它可以访问的各种范围(servletContext、等),并且(我猜? flowScope)flashScope搜索每个范围,直到找到匹配的属性。结果是:
<p>test text</p>
Run Code Online (Sandbox Code Playgroud)
在视图中呈现。
在我们的 thymeleaf 模板中,我们尝试做同样的事情:
<p th:text="${referenceData}"/></p>
Run Code Online (Sandbox Code Playgroud)
但这只是返回一个空字符串。该视图呈现一个空字符串:
<p></p>
Run Code Online (Sandbox Code Playgroud)
(但我认为 EL 实际上是作为 null 返回的)
我非常确定,如果该referenceData对象是诸如flowScope或 之类的范围的属性flashScope,那么这将起作用 …
我正在编写一些JUnit测试,它们从第三方库扩展了一个类.超类扩展TestCase,所以根据定义,我的子类也是如此.
在我的子类中,我用前缀编写测试方法,test然后执行这些方法.
但是,出于多种原因,我们希望转移到JUnit 4(其中一个原因是我们不希望将测试方法作为前缀test)
我尝试使用JUnit 4 @Test注释编写新测试,但这些方法不会被执行.
例如:
public abstract class UtilityClassFromThirdPartyLibrary extends TestCase {
}
public class MyTestClass extends UtilityClassFromThirdPartyLibrary {
public void testThisMethodIsInvokedBecauseItStartsWithTest {
}
@Test
public void thisMethodDoesNotGetInvoked {
}
}
Run Code Online (Sandbox Code Playgroud)
不扩展第三方测试类不是一种选择.(对于它的价值,它是Spring,它AbstractXmlFlowExecutionTests反过来扩展了其他Spring类,最终扩展TestCase.超类中的方法提供了如此多的设置和样板,没有扩展它们只是为了使用JUnit 4会适得其反)
如上所述,我们使用JUnit 4 @Test注释的动机之一是它允许我们更好地命名我们的方法.我们的观点是这个词test是多余的,因为该类显然是一个测试类,并且该方法带有注释@Test.我们以BDD样式编写测试,因此我们的测试方法名称描述了被测单元应该做什么 - 我们的命名约定是public void shouldDoSomething()
有没有人知道是否有可能混合' TestCase使用JUnit 4的方法扩展JUnit 3的''匹配测试类@Test?如果是这样,怎么样?
谢谢
内森
我正在处理使用 JPA(不是 JPA-2)的遗留代码库,并且在 DAO 实现类中遇到了以下方法来通过 ID(这也是它的主键)检索单个实体:
public EmailTemplate findEmailTemplateById(long id) {
LOG.debug("Entering findEmailTemplateById(id='" + id + "')");
// Construct JPQL query
String queryString = "SELECT a FROM EmailTemplate a " +
"WHERE templateId = :templateId";
Query query = entityManager.createQuery(queryString);
query.setParameter("templateId", id);
LOG.debug("Using query " + queryString);
List<EmailTemplate> resultList = query.getResultList();
LOG.debug("Exiting findEmailTemplateByName(id='" + id + "') results size " + resultList.size() + " ( returns null if 0 )");
if (resultList.isEmpty() || resultList.size() == 0) {
return null;
} else …Run Code Online (Sandbox Code Playgroud) java ×4
spring ×2
camera ×1
git ×1
gradle ×1
groovy ×1
hibernate ×1
html ×1
html5 ×1
ios ×1
javascript ×1
jpa ×1
junit3 ×1
junit4 ×1
logback ×1
maven ×1
meta-tags ×1
modernizr ×1
objective-c ×1
parameters ×1
spring-mvc ×1
ssh ×1
thymeleaf ×1
variables ×1
webcontext ×1