小编nog*_*bag的帖子

大规模AngularJS应用程序 - 多个UI布局

我刚刚开始学习AngularJS.路由器使单个视图(dom元素)与部分交换变得简单.在我的情况下,我可能有20个左右的屏幕,其中"全尺寸"布局取代整个屏幕减去公共顶部标题,如下所示:

全尺寸布局

这很好用.但是,我的应用程序需要多个布局!如果我打开一些记录,它可能有一个带有~20个链接的动态子菜单,点击每个链接应该只交换右侧面板.当然,我只想获取一次这个动态子菜单.

子菜单的详细记录

也许开放其他东西可能会有一个完全不同的布局(有自己的子菜单 - 可能是水平的).

Angular可以像这样处理多个布局吗?或者我真的需要为每种类型的布局构建单独的应用程序!?这种类型的东西在我使用的其他框架上相当简单,例如GWT(活动和地方绑定到URL),ExtJS等.

我在这里发现了一个类似的(虽然可能不那么复杂)但没有答案的问题: 使用Angular的多个布局

angularjs

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

为什么我不应该使用date4j而不是joda java.util.Calendar或jsr 310?

我最近遇到了date4j,这是一个非常简单的库(基本上是一个单独的类),用于处理Java中的日期.从概念上讲,我非常喜欢date4j的"想法".实际上,在阅读了整个主站点和javadoc中的文档之后,我几乎同意所说的一切.

现在,可能有几个原因我不应该使用date4j - 错误,性能,缺乏用户等.我不是在问这些事情.从概念上讲,我问的是date4j的概念有什么问题(对于那里的大多数应用程序而言)?当然,可能有一些应用程序需要像joda或threeten这样的东西 - 但我相信这些应用程序属于少数.

人们给处理日期/时间的用户提供的正常建议(几乎所有人都在编写Java应用程序)是这样的:

  • 使用joda-time而不是java.util.Calendar
  • 将您的Web服务器设置为UTC
  • 将数据库服务器设置为UTC
  • 将您的日期时间存储在UTC中

实际上,最后三个要点说明了人们在使用日期时当前的心理模型存在的问题.人们试图在应用程序和数据库级别管理时区(更不用说ORM框架添加了另一层抽象,这使得事情变得更加复杂).

你不应该做那些事情.例如,如果您正在使用java.util.Calendar,并且您正在某个用户定义的时区中操作时间:

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
c.set(Calendar.YEAR, 2011);
c.set(Calendar.MONTH, 0);
c.set(Calendar.DAY_OF_MONTH, 1);
c.set(Calendar.HOUR_OF_DAY, 3);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Run Code Online (Sandbox Code Playgroud)

无论时区如何,这都代表了"瞬间".您应该能够将此时间保留在数据库中,而不必担心会发生任何类型的"转换".如果数据库位于上海时区并且网络服务器位于洛杉矶时区也无关紧要 - 无论如何,时刻都是相同的.

一个问题是一些数据库试图为你管理时区(我正在看你,Postgres!grr!)并且更糟糕的是,JDBC驱动程序级别行为是供应商特定的 - 即PreparedStatement.setDate/getDate.

date4j使用的心理模型似乎摆脱了所有的混乱.例如,显式强制用户在调用now()时提供时区.在网站上有一些非常好的建议来使用这个库(这些我以前在我自己的应用程序中已经做过的事情),例如:

  • 不要使用试图管理时区的数据库类型
  • 将时区存储为单独的列(如果需要)

为什么没有更多的人采用像date4j这样的图书馆?

java timezone jodatime java.util.date

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

React renderComponent替换DOM

JSX代码:

var App = React.createClass({
  render: function() {
    return <div className="darken">hello world</div>
  }
});
React.renderComponent(<App/>, document.querySelector('.main'))
Run Code Online (Sandbox Code Playgroud)

HTML:

<body>
  <header>welcome</header>
  <div class="main"></div>
</body>
Run Code Online (Sandbox Code Playgroud)

React.renderComponent将附加渲染的JSX <div class="main">.HTML的输出将是:

<body>
  <header>welcome</header>
  <div class="main">
    <div class="darken">hello world</div>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

是否可以React.renderComponent替换<div class="main">,所以我期望这样:

<body>
  <header>welcome</header>
  <div class="darken">hello world</div>
</body>
Run Code Online (Sandbox Code Playgroud)

reactjs

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

组织一个React JS项目 - 构建单个JS文件

我刚开始使用React.我没有任何问题地浏览了CommentBox教程.但是框架没有为组织JS文件或为SPA编译单个缩小的JS文件提供太多/任何指导.我已经知道框架是灵活的,并没有强制执行标准,我确信这些问题可能对于在Javascript生态系统中开发的人来说显而易见.

我认为共识是使用Browserify,在文档中有一个指向git starter项目的链接:

https://github.com/petehunt/react-browserify-template

这是一个好的开始,但它仍然只编译一个JS文件"index.js".我阅读了一些browserify手册,我认为我只需要"需要"我的其他文件(这些文件需要自己导出).

所以我修改了index.js看起来像这样:

/** @jsx React.DOM */
var React = require('react');
var pkg = require('./package.json');

var commentBox = require('./comment-box.js');
Run Code Online (Sandbox Code Playgroud)

comment-box.js基本上是一个hello world test:

/** @jsx React.DOM */
var React = require('react');
var CommentBox = React.createClass({
    render: function() {
        return (
            <div className="commentBox">
            Hello, world! I am a CommentBox.
            </div>
            );
    }
});

React.renderComponent(
    <CommentBox />,
    document.getElementById('content')
);

module.exports = CommentBox;
Run Code Online (Sandbox Code Playgroud)

如果我运行react-browserify-template的启动目标,它似乎生成了browser-bundle.js:

npm start
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试构建目标

npm build
Run Code Online (Sandbox Code Playgroud)

...什么都没发生.我将npm的输出更改为详细,我得到以下内容:

npm info it worked if it ends with ok
npm verb …
Run Code Online (Sandbox Code Playgroud)

browserify reactjs

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

Dagger 2没有生成类

我想尝试新的东西并使用Dagger 2作为我的DI框架.所以我在我的项目中有以下pom和"hello world"咖啡机类(http://google.github.io/dagger/).

但是当我做一个mvn干净安装时,没有生成任何类.据我所知,应该有一个"Dagger_CoffeeShop"类生成.嗯......我错过了什么?

<modelVersion>4.0.0</modelVersion>

<groupId>kic</groupId>
<artifactId>xfoo</artifactId>
<version>0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>com.google.dagger</groupId>
        <artifactId>dagger</artifactId>
        <version>2.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
</dependencies>


<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <dependencies>
                <dependency>
                    <groupId>com.google.dagger</groupId>
                    <artifactId>dagger-compiler</artifactId>
                    <version>2.0-SNAPSHOT</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

java maven dagger dagger-2

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

Git对推送的功能分支进行重新设置

我有一个长期运行的本地功能分支,我定期与master进行挤压和重新定位,以使其在本地保持最新。

完成后,我希望我的功能在主节点上的单个压缩提交中。

但是,我担心由于硬件问题而失去工作,因此作为预防措施,我将其推送到github上的新功能分支。自从这样做以来,我真的不确定如何使功能分支保持最新状态,因为它已经被推送了(我宁愿不合并来自主创建合并提交的更改)。

我是唯一使用此功能分支的开发人员。因此,我不必担心在已经推送的分支上重写历史记录。将其他提交推送到我的远程功能分支,然后在完成功能后压扁该分支,然后将其重新建立为基础就可以了吗?还是因为分支已经公开,git会对分支分支抛出一些错误?

或者,我以为完成工作后,可以简单地取消跟踪远程功能分支(因此我的本地分支不再与远程分支有关联),将提交压缩在本地功能分支中,然后重新建立我的功能在master上本地分支。

git

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

带有网址模式“ / *”的servlet映射中的StackOverflowError

我有一组JSP页面,我想隐藏.jsp扩展名(经过一番研究后,看来对SEO很有用)。

我遇到的一种解决方案是:

<servlet>
    <servlet-name>mypage</servlet-name>
    <jsp-file>/some-page.jsp</jsp-file>
</servlet>
<servlet-mapping>
    <servlet-name>mypage</servlet-name>
    <url-pattern>/some-page</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

虽然这样做可行,但我相信我必须为网站上的每个jsp页面设置此映射。

我遇到了这里发布的另一个解决方案(易于使用的URL):JSP / Servlet的隐藏功能

...,它使用一个简单的servlet来转发请求。在我的web.xml中,我可以执行以下操作:

<servlet>
    <servlet-name>MyServletName</servlet-name>
    <servlet-class>myservlets.PrettyUrlServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyServletName</servlet-name>
    <url-pattern>/myservlet/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

现在的问题是我不想点击以下URL:www.mydomain.com/myservlet/some-page

我想使用以下网址:www.mydomain.com/some-page

所以我将url-pattern更改为“ / *”

<servlet>
    <servlet-name>MyServletName</servlet-name>
    <servlet-class>myservlets.PrettyUrlServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyServletName</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

但这会导致无限循环:

    Exception in thread "http-bio-8080-exec-1" java.lang.StackOverflowError
            at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:219)
            at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:228)
            .
            .
            at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:228)
            at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:228)
            at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
            at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
            at myservlets.PrettyUrlServlet.doGet(PrettyUrlServlet.java:22)
Run Code Online (Sandbox Code Playgroud)

我不确定该如何解决。有任何想法吗?

seo tomcat servlets servlet-filters

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

Windows on ARM(Snapdragon 835/850)上的Java?

选择了具有Snapdragon 835 ARM处理器(ARMv8)的HP Envy X2。在Windows设备上是否存在可用于Windows的Oracle JDK或OpenJDK构建?还是我最好的选择是使用x86版本(它将在仿真下运行)?

java windows arm qualcomm

5
推荐指数
0
解决办法
515
查看次数

Thymeleaf - 抛出异常是在上下文中找不到模板变量

如果在上下文中找不到模板中使用的变量,我希望 Thymeleaf 抛出异常。默认情况下,如果在上下文中找不到绑定变量,Thymeleaf 会在 HTML 标签中注入空文本。这看起来很危险,因为它本质上默默地隐藏了错误。

<div data-th-text="${amount}">Blah</div>
Run Code Online (Sandbox Code Playgroud)

代码:

Context context = new Context();
// never set "amount" variable
Run Code Online (Sandbox Code Playgroud)

输出:

<div></div>
Run Code Online (Sandbox Code Playgroud)

我假设会有一个“严格”模式,如果在上下文中找不到变量,它将抛出带有变量名称和附加上下文的异常。我一直在搜索 stackoverflow 和 API 文档,但找不到类似的内容。我想过重写 ContextgetVariable以便它进行containsVariable检查,但我不确定这是否会对性能产生影响。另外,我无法捕获有关模板中失败位置的任何元数据。我错过了一些明显的东西吗?

我使用 Thymeleaf 作为独立引擎——而不是作为 web/spring 应用程序的一部分。

java thymeleaf

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

如何在 Vue 3 中输入仅接受只读引用的函数?

在 Vue 3 中,您可以通过简单地用readonly(myRef).

有没有办法强制在编译时仅使用只读引用调用函数?

例如,这应该是一个编译错误:

const name = ref('Susan');

function blah(someRef: Readonly<any>) {
  // ...
}

blah(name);
Run Code Online (Sandbox Code Playgroud)

typescript vue.js

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

Vue.js - 使用 :value 时选择元素不更新,v-model 没问题

我有两个<select>元素。当我在第一个中选择一个值时,我想为第二个选择默认值。它可以与 一起使用v-model,但不能与 一起使用:value

其中之一是车辆列表。

<select :value="vehicle" @change="setVehicle($event.target.value)">
  <option value="CAR">Car</option>
  <option value="PLANE">Plane</option>
</select>
Run Code Online (Sandbox Code Playgroud)

另一个是零件清单。仅当选择时该WINGS零件才可见。PLANE

<select :value="part" @change="setPart($event.target.value)">
  <option value="ENGINE">Engine</option>
  <option value="WINDOWS">Wheels</option>
  <option v-if="vehicle === 'PLANE'" value="WINGS">Wings</option>
</select>
Run Code Online (Sandbox Code Playgroud)

车辆的设置器很简单,但飞机的默认部分是有条件渲染的WINGS

setVehicle: function(newVehicle) {
  this.vehicle = newVehicle;
  if (this.vehicle === "PLANE") {
    this.part = "WINGS";
  } else {
    this.part = "ENGINE";
  }
}
Run Code Online (Sandbox Code Playgroud)

反应part数据设置为正确的值,例如您可以使用 来显示它{{ part }},但<select>元素未正确更新。如果我更改零件的选择以使用 v-model 它工作正常:

<select v-model="part">
Run Code Online (Sandbox Code Playgroud)

使用 v-model 不是一个可接受的解决方法,因为在我的现实世界应用程序中,它part是只读的,只能使用 setter …

javascript vue.js

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

Tomcat maven插件 - 无法加载类"org.slf4j.impl.StaticLoggerBinder"

当我在一个独立的tomcat容器中启动我的webapp时,我看到Flyway日志记录正常(如果找到则使用commons-logging,如下面的Axel所述,则使用sout).

但是,当我使用apache tomcat maven插件(tomcat7-maven-plugin)时,我看到以下内容:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Run Code Online (Sandbox Code Playgroud)

没什么好看的.这是完整的代码:

public void contextInitialized(ServletContextEvent sce) {
    Flyway flyway = new Flyway();
    flyway.setDataSource(...);
    flyway.migrate();
}

<listener>
    <listener-class>com.blah.conf.FlywayListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

我正在使用logback-classic进行日志记录.泽西和吉斯都记录正常(虽然我删除它们以缩小问题范围).

这是我在类路径中看到的唯一与日志相关的jar:

logback-classic-1.0.13
logback-core-1.0.13
slf4j-api-1.7.5
Run Code Online (Sandbox Code Playgroud)

这是slf4j的依赖树:

mvn dependency:tree -Dverbose -Dincludes=org.slf4j
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ hello ---
[INFO] com.hello:hello:war:1.0-SNAPSHOT
[INFO] \- ch.qos.logback:logback-classic:jar:1.0.13:compile
[INFO]    \- org.slf4j:slf4j-api:jar:1.7.5:compile
Run Code Online (Sandbox Code Playgroud)

所以我更新的问题是,为什么使用tomcat maven插件vs独立存在差异?我没有在"target"文件夹中看到临时部署的任何其他jar.

更新:添加jcl-over-slf4j后,问题就消失了.

java logging logback slf4j tomcat7

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